/**************************************************** 希尔排序(Shell,s Sort): 1. 又称”缩小增量排序“,是不稳定的排序方法。 2. 算法的时间复杂度为O(n^2)。 若为正序时,其时间复杂度为O(n)。 3. 算法思想:先将整个待排记录序列分割(相隔某个增量 的记录)成为若干个子序列分别进行直接插入排序,待 整个序列中的记录“基本有序”时,再对全体记录进行一 次直接插入排序。 ****************************************************/ #include <iostream> using namespace std; void ShellInsert(int L[], int n, int d) //n为数组长度,d为前后记录位置的增量 { for (int i = d; i < n; ++i) { if (L[i] < L[i - d]) { int temp = L[i]; int j(i - d); for (; j > 0 && temp < L[j]; j -= d) L[j + d] = L[j]; L[j + d] = temp; } } } void ShellSort(int L[], int n, int A[], int m) { for (int i = 0; i < m; ++i) ShellInsert(L, n, A[i]); } int main() { int L[10] = {1, 5, 2, 9, 6, 3, 4, 2, 10, 8}; int A[4] = {5, 3, 2, 1}; ShellSort(L, 10, A, 4); for (int i = 0; i < 10; ++i) cout << L[i] << " "; cout << endl; }