基本思想
設待排元素序列有
至於
代碼
//待排數據存儲在數組a中,以及待排序列的左右邊界
public void ShellSort(int[] a, int left, int right) {
int gap = right - left + 1;//劃分子序列的間距
do {
gap = gap / 3 + 1;
for (int i = left + gap; i <= right; i++) {
if (a[i] < a[i - gap]) {
int j = i - gap;
int temp = a[i];
do {
a[j + gap] = a[j];
j = j - gap;
} while (j >= left && temp < a[j]);
a[j + gap] = temp;
}
}
} while (gap > 1);
}
性能分析
- 時間複雜度
對希爾排序的時間複雜度的分析很困難,在特定情況下可以準確地估算元素的比較次數和移動次數,但想要弄清楚元素的比較次數和元素移動次數與增量選擇之間的依賴關係,並給出完整的數學分析,還沒有人能夠做到。
由於即使對於規模較大的序列(n≤1000 ),希爾排序都具有很高的效率。並且希爾排序算法的代碼簡單,容易執行,所以很多排序應用程序都選用額希爾排序算法。 - 穩定性
希爾排序是一種不穩定的排序算法。