排序算法-希爾排序(移位式)

希爾排序是直接插入排序算法的一種更高效的改進版本,又稱"縮小增量排序"。希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨着增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,算法結束。

希爾排序:
時間複雜度是O(nlogn)
最好情況O(nlog2n)
最壞情況O(nlog2n)
空間複雜度 O(1)
排序方式不佔用額外內存,希爾排序是不穩定的。

圖解
在這裏插入圖片描述
核心代碼

public static void shellSort(int arr[]){
        //增量gap,並逐步的縮小增量
       for (int gap = arr.length/2; gap > 0; gap /= 2) {
           //從第gap個元素,逐個對其所在的組進行直接插入排序
           for (int i = gap; i < arr.length; i++) {
              int j = i;
              int temp = arr[j];
              if (arr[j] < arr[j - gap]){
                  while (j - gap >= 0 && temp < arr[j-gap]){
                      //移動
                      arr[j] = arr[j - gap];
                      j -= gap;
                  }
                  //當退出while後,就給temp找到插入的位置
                  arr[j] = temp;
              }

           }
       }
   }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章