1. 程式人生 > 其它 >資料結構--插入排序和選擇排序

資料結構--插入排序和選擇排序

直接插入排序的思想是:是將n個待排序的元素由一個有序表和一個無序表組成,開始時有序表中只包含一個元素。排序過程中,每次從無序表中取出第一個元素,將其插入到有序表中的適當位置,使有序表的長度不斷加長,完成排序過程。 

例如,對序列21,48,21*,9進行直接插入排序,21和21*的相對位置在排序前後可保持。如下所示: 

第一趟得到有序子序列:21,48  

第二趟得到有序子序列:21,21*,48  

第三趟得到有序序列:9,21,21*,48 

所以直接插入排序是穩定的,時間複雜度都為O(n2),空間複雜度為O(1)。

程式碼實現1.3 插入排序 | 菜鳥教程 (runoob.com)

簡單選擇排序的過程是:第一趟在n個記錄中選取最小記錄作為有序序列的第一個記錄;第二趟在n-1個記錄中選取最小記錄作為有序序列的第二個記錄:第i趟在n-i+1 個記錄中選取最小的記錄作為有序序列中的第i個記錄,直到將序列排列有序。 

對序列21,48,21*,9進行簡單選擇排序,過程如下: 

第一趟選出最小元素,將其交換至1號位置,序列為:9,48,21*,21  

第二趟選出次小元素,將其交換至2號位置,序列為:9,21*,48,21 

第三趟選出第三小元素,將其交換至3號位置,序列為:9,21*,21,48  

所以簡單選擇排序是不穩定的,時間複雜度都為O(n2),空間複雜度為O(1)。

程式碼實現1.2 選擇排序 | 菜鳥教程 (runoob.com)

從該例可知,簡單選擇排序過程不能保證排序碼相同的兩個元素在排序前後的相對位置不變,直接插入排序則可以。