常見的排序演算法 插入排序

2021-10-05 03:28:25 字數 1731 閱讀 9706

排序:所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。

穩定性:假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序後的序列中,r[i]仍在r[j]之前,則稱這種排序演算法是穩定的;否則稱為不穩定的。

內部排序:資料元素全部放在記憶體中的排序。

外部排序:資料元素太多不能同時放在記憶體中,根據排序過程的要求不能在內外存之間移動資料的排序

2.1 插入排序

2.1.1基本思想:

直接插入排序是一種簡單的插入排序法,其基本思想是:把待排序的記錄按其關鍵碼值的大小逐個插入到乙個已經排好序的有序序列中,直到所有的記錄插入完為止,得到乙個新的有序序列 。(如:玩撲克)

2.1.2直接插入排序

當插入第i(i>=1)個元素時,前面的array[0],array[1],…,array[i-1]已經排好序,此時用array[i]的排序碼與array[i-1],array[i-2],…的排序碼順序進行比較,找到插入位置即將array[i]插入,原來位置上的元素順序後移.

即分為兩組,每次排序乙個數key,都要用位置的值與該位置前面的值的值進行比較,若key較小,則將與key對比的數往後( i+1)移動一位。直到找到乙個小於或等於key的值,則將key放在該數的後乙個位置處。

void

insertsort

(int arr,

int len)

arr[j +1]

= temp;}}

}

直接插入排序的特性總結:

元素集合越接近有序,直接插入排序演算法的時間效率越高

時間複雜度:o(n^2)

空間複雜度:o(1),它是一種穩定的排序演算法

穩定性:穩定

2.1.3 希爾排序( 縮小增量排序 )

希爾排序法又稱縮小增量法。

希爾排序法的基本思想是:

先選定乙個整數gap,把待排序檔案中所有記錄分成個gap組,所有距離為的記錄分在同一組內,並對每一組內的記錄進行排序。然後重複上述分組和排序的工作。當到達gap=1時,所有記錄在統一組內排好序。

void

shellsort

(int arr,

int len)

arr[k + gap]

= temp;}}

}}while

(gap>=1)

;}

希爾排序的特性總結:

希爾排序是對直接插入排序的優化。

當gap > 1時都是預排序,目的是讓陣列更接近於有序。當gap == 1時,陣列已經接近有序的了,這樣就

會很快。這樣整體而言,可以達到優化的效果。我們實現後可以進行效能測試的對比。

希爾排序的時間複雜度不好計算,需要進行推導,推導出來平均時間複雜度: o(n1.3—n2)

穩定性:不穩定

常見排序演算法 插入排序

插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序和希爾排序。直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r ...

常見的排序演算法 插入排序

插入排序的思想 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子陣列中的適當位置,直到全部記錄插入完成為止。一 直接插入排序 include using namespace std 列印 void print array int a,int n 排序void insert sort i...

常見排序演算法之插入排序

目錄 一 簡介 二 排序思路 三 演算法實現 四 原理分析 插入排序,就是假定乙個參考值,假設該參考值左邊的元素都有序,那麼從該元素開始從後往前挨個查詢,如果找到比參考值大的數,那麼就將這個大的數後移,如果未找到比參考值大的數,說明不用移動元素。迴圈比較,經過比較後移之後就會空出乙個位置,用於存放這...