排序演算法 直接插入排序

2021-07-11 16:18:43 字數 1360 閱讀 8401

說到排序演算法,我們常用的也就7種,即:直接插入排序,希爾排序,簡單選擇排序,堆排序,氣泡排序,快速排序,歸併排序。

下面我將依次詳細地介紹這幾種排序演算法。 

1、直接插入排序

插入,即表示將乙個新的資料插入到乙個有序陣列中,並繼續保持有序。例如有乙個長度為n的無序陣列,進行n-1次的插入即能完成排序;第一次,陣列第1個數認為是有序的陣列,將陣列第二個元素插入僅有1個有序的陣列中;第二次,陣列前兩個元素組成有序的陣列,將陣列第三個元素插入由兩個元素構成的有序陣列中......第n-1次,陣列前n-1個元素組成有序的陣列,將陣列的第n個元素插入由n-1個元素構成的有序陣列中,則完成了整個插入排序。

基本思路:從陣列的第二個元素開始,依次取陣列中的元素,將它與前面的元素相比較,插入到這個元素的前面或者後面(這取決於你想從大往小排序還是從小往大排序)。然後再取下乙個元素,跟前兩個已經有序的數比較,插入到合適的位置。依次類推。

以下面5個無序的資料為例:65 27 59 64 58 

第1次插入: 27 65 59 64 58(先將前兩個元素排序)

第2次插入: 27 59 65 64 58(將元素59插入到已經有序的陣列中:27 65)

第3次插入: 27 59 64 65 58(將元素64插入到已經有序的陣列中:27 59 65)

第4次插入: 27 58 59 64 65(將元素58插入到已經有序的陣列中:27 59 64 65) 

平均時間複雜度:o(n2)

空間複雜度:o(1)  (用於記錄需要插入的資料)

穩定性:穩定

**:

//插入排序演算法(公升序)

//pdataarray 無序陣列

//idatanum 無序陣列中元素的個數

void insertsort(int* pdataarray, int idatanum)

if(j!=i-1)//存在比其小的數

}}

//二分查詢插入排序

//查詢數值idata在長度為ilen的pdataarray陣列中的插入位置

int findinsertindex(int *pdataarray, int ilen, int idata)

else

}if(pdataarray[index]<=idata)

index++;

return index;

}//pdataarray 無序陣列

//idatanum 無序陣列中元素的個數

void binaryinsertsort(int* pdataarray, int idatanum)

pdataarray[j]=temp;//插入

} }}

排序演算法 插入排序 直接插入排序

package 插入排序 直接插入排序 從後向前找到合適位置後插入 穩定 基本思想 每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置 從後向前找到合適位置後 直到全部插入排序完為止。public class 直接插入排序 system.out.println 排序之前 fo...

排序演算法 插入排序 直接插入排序

當插入第i i 1 個元素時,前面的v 0 v i 1 等i 1個 元素已經有序。這時,將第i個元素與前i 1個元素v i 1 v 0 依次比較,找到插入位置即將v i 插入,同時原來位置上的元素向後順移。在這裡,插入位置的查詢是順序查詢。直接插入排序是一種穩定的排序演算法,其實現如下 public...

排序演算法 直接插入排序

思想 每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。第一趟比較前兩個數,然後把第二個數按大小插入到有序表中 第二趟把第三個資料與前兩個數從前向後掃瞄,把第三個數按大小插入到有序表中 依次進行下去,進行了 n 1 趟掃瞄以後就完成了整個排序過程。演算法複雜度 如果目標是把...