希尔排序
-
希尔排序利用了插入排序的两个特点
-
元素越少,排序效率越高,越接近有序,效率越高
-
希尔排序的不稳定性
int arr[] = {4,1,2(1),2(2),5};
// 在经过排序后可能造成
int arr[] = {4,1,2(2),(2),5};
第一个2,会排序在第2个后面的情况
int xiersort(int *data,int length) {
int gap = 0;
int i = 0;
int j = 0;
for (gap = length / 2; gap >= 1; gap /= 2) {
for (i = gap; i < length; ++i) // 每个小组之间遍历
{
int temp = data[i]; // 第一次循环对应23
for (j = i - gap; j >= 0 && temp < data[j]; j = j - gap)
// 每个组组内成员的排序
{
data[i] = data[j];
// 第一次交换发生在data[7]=data[1]
}
// 分两种情况,1:j + gap = i时,原封不动赋值
// 如果发生了交换,j+gap就要被data[i]赋值了
data[j + gap] = temp;
}
}
for (int i = 0; i < 12; i++) {
cout << data[i] << endl;
}
return 1;
}