c++版的希尔排序源代码及注释
时间: 2023-08-04 16:09:15 浏览: 96
希尔排序源代码
以下是C++版的希尔排序源代码及注释:
```cpp
#include <iostream>
using namespace std;
void shellSort(int arr[], int n) {
// 初始化间隔为 n/2
int gap = n / 2;
// 不断缩小间隔
while (gap > 0) {
// 对每个分组进行插入排序
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j = i;
// 在当前分组内进行插入排序
while (j >= gap && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = temp;
}
// 缩小间隔
gap /= 2;
}
}
int main() {
int arr[] = { 12, 34, 54, 2, 3 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Original array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
shellSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
注释:
1. `shellSort` 函数:希尔排序的实现代码,参数 `arr` 表示待排序的数组,参数 `n` 表示数组长度。
2. 初始化间隔为 `n/2`,即将待排序的数组分为两个子序列,第一个子序列包括下标为 0、n/2、2n/2...的元素,第二个子序列包括下标为 1、n/2+1、2n/2+1...的元素,然后对每个子序列进行插入排序。
3. 不断缩小间隔,每次将间隔除以 2,直到间隔为 1,此时即为普通插入排序。
4. 对每个分组进行插入排序,从第 gap 个元素开始,将其与前面的元素依次比较,如果前面的元素比它大,则将前面的元素后移 gap 位,继续比较,直到找到它应该插入的位置。
5. 在当前分组内进行插入排序,将待排序的元素插入到已排序的元素中,保证已排序的元素仍然有序。
6. 缩小间隔,每次将间隔除以 2,直到间隔为 1,此时即为普通插入排序。
7. `main` 函数:程序入口,声明一个整型数组 `arr`,并初始化为 `{ 12, 34, 54, 2, 3 }`,然后调用 `shellSort` 函数对数组进行排序。
8. 输出原始数组和排序后的数组。
阅读全文