shell排序_Java后端技术精选:希尔排序
要點
希爾(Shell)排序又稱為縮小增量排序,它是一種插入排序。它是直接插入排序算法的一種威力加強版。該方法因DL.Shell于1959年提出而得名。
希爾排序的基本思想是:
把記錄按步長 gap 分組,對每組記錄采用直接插入排序方法進行排序。
隨著步長逐漸減小,所分成的組包含的記錄越來越多,當步長的值減小到 1 時,整個數據合成為一組,構成一組有序記錄,則完成排序。
我們來通過演示圖,更深入的理解一下這個過程。
在上面這幅圖中:
初始時,有一個大小為 10 的無序序列。
在第一趟排序中,我們不妨設 gap1 = N / 2 = 5,即相隔距離為 5 的元素組成一組,可以分為 5 組。接下來,按照直接插入排序的方法對每個組進行排序。
在第二趟排序中,我們把上次的 gap 縮小一半,即 gap2 = gap1 / 2 = 2 (取整數)。這樣每相隔距離為 2 的元素組成一組,可以分為 2 組。按照直接插入排序的方法對每個組進行排序。
在第三趟排序中,再次把 gap 縮小一半,即gap3 = gap2 / 2 = 1。 這樣相隔距離為 1 的元素組成一組,即只有一組。按照直接插入排序的方法對每個組進行排序。此時,排序已經結束。
需要注意一下的是,圖中有兩個相等數值的元素 5 和 5 。我們可以清楚的看到,在排序過程中,兩個元素位置交換了。
所以,希爾排序是不穩定的算法。
核心代碼
public void shellSort(int[] list) { int gap = list.length / 2; while (1 <= gap) { // 把距離為 gap 的元素編為一個組,掃描所有組 for (int i = gap; i < list.length; i++) { int j = 0; int temp = list[i]; // 對距離為 gap 的元素組進行排序 for (j = i - gap; j >= 0 && temp < list[j]; j = j - gap) { list[j + gap] = list[j]; } list[j + gap] = temp; } System.out.format("gap = %d:總結
以上是生活随笔為你收集整理的shell排序_Java后端技术精选:希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python类型提示包 检查静态类型_P
- 下一篇: 哈希算法python_哈希算法(Pyth