資料結構 排序演算法之插入排序

2021-08-18 21:20:43 字數 1865 閱讀 6547

一、排序概念

1、概念

排序是計算機內經常進行的一種操作,其目的是將一組「無序」的記錄序列調整為「有序」的記錄序列。分內部排序和外部排序。若整個排序過程不需要訪問外存便能完成,則稱此類排序問題為內部排序。反之,若參加排序的記錄數量很大,整個序列的排序過程不可能在記憶體中完成,則稱此類排序問題為外部排序。內部排序的過程是乙個逐步擴大記錄的有序序列長度的過程。

2、排序分類

3、各種演算法的效能

二、排序演算法

(一)插入排序

**實現如下所示:

void insertsort(int *array, size_t size)

//插入元素

array[end+1] = key;}}

結果如下所示:

對於插入上述的插入排序,雖然可以解決我們的需求,但是需要每一次的比較與搬移,從而十分的浪費時間,大大降低了效能,使得我們的排序演算法的效率十分的差,因此,我們對插入排序做乙個改變,利用二分查詢,將每次的有序區間給出來,在這個有序區間中對資料做改變,將極大的提高我們的效率。

二分插入排序的**如下所示:

void insertsort_op(int *array, int size)

//搬移元素

int end = i - 1;

while (end >= left)

array[left] = key;}}

結果如下所示:

雖然已經有了二分插入排序,但是在插入排序中,他的效能還是存在一定的缺陷,因此,我們下面來介紹一種插入排序的演算法—–希爾排序

(二)希爾排序

有關希爾排序的**如下所示:

void shellsort(int *array, int size)

//插入元素

array[end + gap] = key;

}--gap;}}

在上面的分析中,將gap的值給為3,但是經過大量的實驗,將gap的值給為gap = gap / 3 + 1;將程式的效率提到最大程度,且在實現的時候,更為簡單。

void shellsort_op(int *array, int size)

//插入元素

array[end + gap] = key;}}

}

結果如下所示:

對於插入排序的學習,大概內容就這麼多了,希望可以幫助到大家!!!

只有不停的奔跑,才能不停留在原地!!!

資料結構 排序之插入排序

插入排序o n2 的執行時間 思想是 若陣列長度為n 那麼把陣列序號從1到n 1的值依次往前進行比較 這裡需要乙個for迴圈 注意每個數在比較的時候它前面的資料都是已經排好序號的 因為從序號為1時就開始排序了 注意我們這裡用類似堆中下浮和上浮的交換方法 把需要交換的資料拿出來 和前面的資料依次進行比...

資料結構排序之插入排序

package sort 最簡單的排序演算法之一是插入排序 insertion sort 插入排序由n 1躺排序組成。對於 p 1到n 1 趟,插入排序保證從位置0到位置p上的元素為已排序狀態。插入排序利用了這樣的 事實 已知位置0到位置p 1 上的元素處於排過序的狀態。例子 原始陣列 34 8 6...

資料結構之插入排序 折半插入排序

排序思路 通過折半查詢的方式找到合適的插入位置再插入。演算法實現 public class biinsertsort else 插入點在 mid 1,right left mid 1 直到找到合適的位置 left或right 1 接下來就將left right 1後的元素後移 for int j i...