直接插入排序 希爾排序

2021-06-26 14:14:09 字數 1082 閱讀 8657

一.直接插入排序:

原理:將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。

最優複雜度:當輸入陣列就是排好序的時候,複雜度為o(n),而快速排序在這種情況下會產生o(n^2)的複雜度。

最差複雜度:當輸入陣列為倒序時,複雜度為o(n^2)

插入排序比較適合用於「少量元素的陣列」。

}二.希爾排序

基本思想是:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。

先將要排序的一組記錄按某個增量d(

n/2,n

為要排序數的個數)分成若干組子串行,每組中記錄的下標相差

d.對每組中全部元素進行直接插入排序,然後再用乙個較小的增量(

d/2)對它進行分組,在每組中再進行直接插入排序。繼續不斷縮小增量直至為1

,最後使用直接插入排序完成排序。

/** 

* 直接插入排序的一般形式

* * @param int dk 縮小增量,如果是直接插入排序,dk=1

* */void shellinsertsort(int* a , int n ,int dk)

a[j+dk] = tmp;

}

}}/**

* 先按增量d(n/2,n為要排序數的個數進行希爾排序

* */ void shellsort(int* a ,int n)

}

直接插入排序 希爾排序

1.直接插入排序 時間複雜度o n2 工作原理 通過構建有序序列,對於未排序資料,在已排序的序列中,從後向前掃瞄,找到相應的位置並插入。插入排序在實現上,在從後向前掃瞄的過程中,需要反覆把已排序元素逐步向後移動,為最新元素提供插入空間。直接插入排序 public static void insert...

插入排序 直接插入 希爾排序

直接插入排序是將元素按順序插入已經排好序的序列中。對於待插入的元素,如果比最後乙個元素還大,則不用處理。否則,從後邊元素開始比較,並順次後移,直到碰到元素小於或者等於該元素。設定第乙個元素位置為哨兵,用來存放待插入元素。include include include using namespace ...

插入排序(直接插入排序 希爾排序)

直接插入排序 基本思想 假設待排序的數存放在陣列arr 1.n 中。初始時,arr 1 自成1個有序區,無序區為arr 2.n 從i 2起直至i n為止,依次將arr i 插入當前的有序區arr 1.i 1 中,生成含n個記錄的有序區。演算法複雜度 對於具有n個記錄的檔案,要進行n 1次排序 各種狀...