插入排序和希爾排序

2021-07-04 14:49:01 字數 1144 閱讀 9209

插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序,

插入排序的基本思想是:每步將乙個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。

public static void sortinsert(int datas)

datas[j] = temp;

}printarr(datas);

system.out.println();

} }

當輸入資料已經排好序時,執行時間為o(n);內能的迴圈檢測判斷條件總是不成立;

當輸入全部逆序時,datas[j] = datas[j-1] 執行的次數為 1+2+3....+n^2 = o(n^2)

希爾排序:

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率。

但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位。

基本思想:

先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄放在同乙個組中。

先在各組內進行直接插入排序;然後,取第二個增量d2

public static void sortsheel(int datas)

datas[j] = temp;

}printarr(datas);

system.out.println();

} }

測試結果:

60,78,2,7,5,87,34,46,23,123,32,53,45,9,99,88,65,[原陣列]

23,78,2,7,5,9,34,46,60,123,32,53,45,87,99,88,65,[gap=8後結果]

5,9,2,7,23,78,32,46,45,87,34,53,60,123,99,88,65,[gap=4後結果]

2,7,5,9,23,46,32,53,34,78,45,87,60,88,65,123,99,[gap=2後結果]

2,5,7,9,23,32,34,45,46,53,60,65,78,87,88,99,123,[gap=1後結果]

插入排序和希爾排序

1.首先,排序按類來分有插入排序 選擇排序 交換排序和歸併排序,而插入排序又分為直接插入排序和希爾 shell 排序 選擇排序類又分為選擇排序和堆排序,交換排序分為氣泡排序和快速排序,今天主要分享插入排序和希爾排序。2.插入排序概念 插入排序 對乙個陣列中的數,比較大小,假設它是公升序排列,認為它的...

插入排序和希爾排序

author shenqi date 2018 1 15.插入排序 每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置 從後向前找到合適位置後 直到全部插入排序完為止。從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 ...

插入排序和希爾排序

思想 插入排序的思想是將乙個無需的數列中的資料挨個插入到乙個已經有序的數列中,使得插入後原本有序的數列依然有序,最終完成整個數列的排序。在實際的排序過程中,已經有序的數列 指的是數列中被拍好序的部分。考慮對下圖的陣列進行插入排序 首先考慮6這個元素,因為第乙個元素8只有它自己,是已經排好序的。考慮6...