1.希爾排序
將待排序數組按照步長進行分組,然後將每組的元素利用直接插入排序的方法進行排序,每次將步長折半減小,gap=1時,利用直接插入完成排序。
1)第一層循環將gap依次折半,對序列進行分組直到gap=1;
2)第二、三層循環利用直接插入排序的兩次循環
2.圖例
3.算法
//希爾排序
void shellSort(int *arr, int num)
{
// 9,1,2,5,7,4,8,6,3,5進行排序 第一次gap = 5;
for (int gap = num/2;gap > 0;gap /= 2)
{
for (int i = gap;i < num;i++)
{
//進行分組插入排序,gab = 5時,arr[i]和arr[gap+i]比較
for (int j = i; j - gap >= 0 && arr[j - gap] > arr[j]; j -= gap)
{
//交換
swap(arr[j - gap], arr[j]);
}
}
}
}
void printArr(int *arr, int num)
{
for (int i = 0;i < num;i++)
{
cout << arr[i] << " ";
}
}
int main()
{
int a[] = { 9,1,2,0,5,7,4,8,6,3,5 };
cout << "排序前: " << endl;
printArr(a, 11);
shellSort(a, 11);
cout << "\n";
cout << "排序後: " << endl;
printArr(a, 11);
return 0;
}
4.運行截圖