八大排序概念分析

2021-08-20 22:01:46 字數 1689 閱讀 1786

本文介紹的

插入排序、希爾排序、選擇排序、氣泡排序、歸併排序、快速排序、堆排序、基數排序

均屬於內部排序

*內部排序:在記憶體中進行排序處理

*外部排序:因資料龐大,需要訪問外存進行處理資料

對於要排序的資料,將系列分成兩部分,左邊關鍵字有序,右邊無序,每次選擇右邊的第乙個資料插入左邊的適當位置。

直接插入排序是一種穩定的排序演算法。

例:將序列按照公升序排序,排序過程如下:

7,9,5,8,3,4>>>9,7,5,8,3,4>>>9,7,5,8,3,4>>>9,8,7,5,3,4>>>9,8,7,5,3,4>>>9,8,7,5,4,3

二分插入排序與直接插入排序類似,不過是在先確定好位置之後,一次性地將資料往後移動。

二分插入排序也是一種穩定的排序演算法。

希爾排序又稱縮小增量排序,方法如下:

先選取乙個小於資料個數n的步長di,然後把待排序的序列分為di個組,從第乙個記錄開始,間隔為di的記錄為一組,分組之後,在每一組中採用直接插入排序或者二分插入排序進行排序即可。

希爾排序是一種不穩定的排序演算法。

氣泡排序的基本思想是基於兩兩比較和交換,每次冒泡出乙個最大的或者最小的資料。方法如下:

對於長度為n的序列,先比較第乙個資料和第二個資料的大小,如果不滿足排序條件,則交換,接下來比較第二個資料和第三個資料的大小,如果不滿足排序條件,則交換,這樣一直比較到第n-1和第n個資料,就冒出了最大值或者最小值,這是第一趟冒泡。第二趟冒泡就一直比較到第n-2和第n-1個資料,冒出了倒數第二大或者倒數第二小的值。重複這個操作,直到整個序列有序。

氣泡排序是一種穩定的排序演算法

演算法如下(公升序):

①i=1,j=1

②如果a[j]>a[j+1],則交換

③如果j④i++,如果i⑤結束

存在這樣一一種情況,冒泡過程中,後面的若干記錄沒有發生交換,這時候再繼續進行冒泡就顯得多此一舉了,那麼我們只需要記錄沒有發生交換的位置,對這個位置之後的資料不進行冒泡處理,只對這個位置之前的資料進行冒泡處理,提公升演算法的效率。

快速排序的基本思想是:

(公升序)以某個記錄的關鍵字為劃分元,將整個資料分為兩組,左邊的資料小於等於劃分元,右邊的資料大於等於劃分元。對左右兩組資料,再各自選擇乙個劃分元,將兩組資料劃分為更小的序列,這樣一直進行下去,直到整個序列有序。

快速排序是一種不穩定的排序演算法

基本思想是:

第一趟從長度為n的序列中選擇關鍵字最大(或最小)的記錄與第乙個記錄交換;

第二趟從長度為n-1的序列中選擇關鍵字最大(或最小)的記錄與第二個記錄交換;

依次進行下去,知道第n-1趟完成,整個序列就按關鍵字有序

樹形選擇排序也稱為錦標賽排序。因其排序過程按錦標賽比賽規則進行排序,基本思想是:

將所有的n個資料看成一顆完全二叉樹的葉子結點,首先在葉子結點間兩兩比較,勝出的進入上一層繼續和兄弟結點進行比較,如果沒有兄弟結點,則直接進入上一層,一直到第二層的兄弟結點比較後,決出第一名。為了產生第二名,可將剛剛產生的第一名的葉子結點置為最小值,然後再進行比較,得到第二名,依次進行下去,可得到第

三、第四......最終得到所有排名。

歸併排序分為2路歸併和多路歸併,而2路歸併一般用在內部排序中,多路歸併一般用在外部磁碟排序中。這裡只接受2路歸併

基本思想:

將兩個有序表合成乙個更大的有序表。

基數排序是基於分配——收集的排序演算法,它利用的是多關鍵字的排序思想。

uy

八大排序演算法

1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...

八大排序演算法

一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...

八大排序演算法

排序的定義 輸入 n個數 a1,a2,a3,an 輸出 n個數的排列 a1 a2 a3 an 使得a1 a2 a3 an in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基數排序 桶排序...