希尔排序

//希尔排序本质就是分组插入排序
//插入排序在数据量较小时效率很高,而在数组接近逆序时效率很低
//因此希尔排序本质就是先将数组分成比较小的数组进行排序
//再在排好序后对数组进行比较大的分组排序
//这样大的分组就会因为数组大致有序而效率较高
//重复此过程直至gap=1,及对整个数组进行排序
//此时因为此前的小分组排序已经让数组大致有序
//所以此时再进行插入排序效率就会比较高
int shell_sort(int *data, int length) {
int gap = 0;//分组距离
int i = 0, j = 0;
int temp = 0;

for (gap = length / 2; gap >= 1; gap /= 2) {
//从后面向前比较
for (i = gap; i < length; ++i) {

temp = data[i];
for (j = i - gap; j >= 0 && temp < data[j]; j = j - gap) {
data[j + gap] = data[j];
}//数组后移
data[j + gap] = temp;//插入元素
//即使temp>=data[j]直接跳出循环,j已经被初始化为i-gap,所以存到j+gap就是保持不变
}

}

return 0;
}

posted @ 2026-07-04 13:37  Harvd  阅读(5)  评论(0)    收藏  举报