本文最后更新于:3 个月前
希尔排序的原理、特点和完整代码实现。
希尔排序(Shell Sort)
原理
先将待排序表分割成若干形如L[i, i+d, i+2d, … , i+kd]的特殊子表,对各个子表分别进行直接插入排序。缩小增量d,重复上述过程,直到d = 1为止。
特点
- 空间复杂度:O(1)
- 时间复杂度:未知,但优于直接插入排序
- 稳定性:不稳定
- 适用性:仅可用于顺序表
高频题型:给出增量序列,分析每一趟排序后的状态
完整代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include<iostream> #include<string>
using namespace std;
void ShellSort(int A[], int len) { int d,i,j; for (d = len/2; d >=1; d=d/2) { for (i = d+1; i <= len; i++) { if (A[i]<A[i-d]) { A[0] = A[i]; for(j = i-d; j >0 && A[0]<A[j]; j-=d) { A[j + d] = A[j]; } A[j + d] = A[0]; } } } }
int main() { int A[] = {0,3,5,2,6,1,4,9,8 }; ShellSort(A, 8); cout << "希尔排序后:" << endl; for (int i = 1; i <= 8; i++) { cout << A[i]; if (i == 8) { cout <<endl;; } else { cout << ","; } } system("pause"); return 1; }
|