排序问题——希尔排序
2018-01-16 19:48
369 查看
1、算法改进要点:直接插入排序法,在待排序的关键字序列基本有序且关键字个数n较少时,其算法的性能最佳。希尔排序又称为缩小增量排序法,是一种基于插入思想的排序方法,他利用了直接插入排序的最佳性能,首先将待排序的关键字序列分成若干个较小的子序列上,对子序列进行直接插入排序,使整个整个待排序序列排好序,在时间耗费上,比较直接插入排序法的性能有较大的改进,然后,在进行直接插入排序时,若待排序记录序列已经有序,直接插入排序的时间复杂度可以提高到O(n)。
C语言实现:
void shell_sort(int array[], int length){
int i;
int j;
int k;
int gap; //gap是分组的步长
int temp; //希尔排序是在直接插入排序的基础上实现的,所以仍然需要哨兵
for(gap=length/2; gap>0; gap=gap/2){
for(i=0; i<gap; i++){
for(j=i+gap; j<length; j=j+gap){ //单独一次的插入排序
if(array[j] < array[j - gap]){
temp = array[j]; //哨兵
k = j - gap;
while(k>=0 && array[k]>temp){
array[k + gap] = array[k];
k = k - gap;
}
array[k + gap] = temp;
}
}
}
}
}
C语言实现:
void shell_sort(int array[], int length){
int i;
int j;
int k;
int gap; //gap是分组的步长
int temp; //希尔排序是在直接插入排序的基础上实现的,所以仍然需要哨兵
for(gap=length/2; gap>0; gap=gap/2){
for(i=0; i<gap; i++){
for(j=i+gap; j<length; j=j+gap){ //单独一次的插入排序
if(array[j] < array[j - gap]){
temp = array[j]; //哨兵
k = j - gap;
while(k>=0 && array[k]>temp){
array[k + gap] = array[k];
k = k - gap;
}
array[k + gap] = temp;
}
}
}
}
}
相关文章推荐
- 排序问题-希尔排序
- 验签排序问题
- php 数组的排序问题
- Oracle 的汉字排序问题
- 应该是很简单的事,关于SQL2005的视图浏览不排序问题
- 数据结构实验之排序六:希尔排序
- 排序问题的基本概念
- JVM的重排序问题
- Matlab 语法记录(I)——特征值排序问题
- C语言程序设计排序问题 ~~求解
- JS数组排序的问题
- 荷兰国旗问题(三元素数组排序问题)
- 排序(二)——关于希尔排序
- 递归的定义以及递归的示例(计算阶乘、计算斐波那契数、递归二分查找、回文串递归方法解决、汉诺塔问题、递归选择排序问题)
- 解决GridView导出Excel后,分页,排序,中文乱码的问题
- android sql汉字排序问题
- Chrome浏览器自动将ajax请求回来的json数据排序问题
- Lucene搜索结果排序问题(按时间倒序排的替代解决方法)
- 希尔排序与快速排序
- sqlserver 数据库出现 排序规则问题