C C 中的經典排序演算法總結

2021-07-04 00:22:45 字數 1660 閱讀 2205

在c/c++中,有一些經典的排序演算法,例如:氣泡排序、雞尾酒排序或雙向氣泡排序(改進的氣泡排序)、選擇排序、直接插入排序、歸併排序、快速排序、希爾排序和堆排序等等。下面對這些排序演算法進行一一解析並給出示例**以共享之。

氣泡排序是最基本的排序演算法,之所以稱之為氣泡排序是因為在氣泡排序的過程中總是大數往前放,小數往後放,相當於氣泡上公升。

氣泡排序的基本原理是:依次比較相鄰的兩個數,將大數放在前面,小數放在後面。

影響氣泡排序演算法效能的主要部分就是迴圈和交換,顯然,次數越多,效能就越差。理論上,氣泡排序的迴圈次數是固定的,為1+2+3+...+(n-1),即1/2*(n-1)*n,其計算複雜度為o(n*n)。

示例**如下。

#includeusing namespace std;

void bullesort(int* pdata, int count)

} tail--; //原tail處資料也已排好,將其減1 }}

void main()

;// cocktail(data, 11);

cocktail(data, sizeof(data) / sizeof(int)); //求data陣列大小的另一種方法

for(int i=0;i<11;i++)

cout<

選擇排序的基本思想是:從需要排序的資料中選擇最小的同第乙個值交換,再從剩下的部分中選擇最小的與第二個交換,迴圈下去,最後實現全佇列的排序。

該演算法需要的迴圈次數依舊是1/2*(n-1)*n,其計算複雜度為o(n*n)。

示例**如下。

#includeusing namespace std;

void selectsort(int* pdata, int count)

void qsort(int v, int left, int right)//執行快速排序

swap(v, left, (left+right)/2); //將中間的元素移到v[0]

last=left; //用last記錄比中間值小的最右位置

for(int i=left+1;i<=right;i++)

; cout<

int last=size-1;

for(int i=1;i<=size;i++,last--)

}

根據本人對各個排序演算法的理解,總結出以下幾點以供參考。

(1)、若從氣泡排序、雞尾酒排序、選擇排序和直接插入排序這四種演算法中選擇,當需要的是簡單的排序法時,個人認為選擇排序是最好的。

(2)、歸併排序和快速排序的基本原理都是基於分治法的。其區別在於:歸併排序先將待排序的序列分為兩部分,再對這兩部分分別進行排序,這兩部分排序之後再將其進行合併;而快速排序則是先選擇中間值,然後把比它小的放在左邊,大的放在右邊,對兩邊分別通過遞迴呼叫快速排序,最後兩種子串行是已經排序好的,直接合併就可以了。

(3)、希爾排序實際是一種複雜的插入排序,希爾排序的時間效能優於直接插入排序,但是當檔案初態基本有序時直接插入排序所需要的比較和移動次數均較少。

(4)、快速排序法是最優秀的,希爾排序是最經典的乙個,所以高階程式設計師可以優先掌握這兩種排序演算法。

各個排序演算法的總結見下圖。

經典排序演算法總結

排序演算法是離散數學和資料結構學科最基本的演算法,雖然知道這些排序演算法的名字,但是一直沒有研究過它們的實現原理。現在把它們收集起來,並一一親自實現,來加深對排序演算法的理解。1,氣泡排序 最簡單的排序演算法,從第乙個元素開始比較相鄰元素大小,如果前邊元素大於後邊元素則交換位置,否則將下標移到下乙個...

經典排序演算法總結

插入排序 選擇排序 歸併排序 排序方法 平均情況 最好最差 空間複雜度 穩定性氣泡排序o n2 o n 2 o n o n o n2 o n 2 o 1 o 1 穩定快速排序o nlogn o nlog n o nlogn o nlog n o n2 o n 2 o nlogn o nlog n 不...

排序演算法 經典的排序演算法總結

一 氣泡排序 1.氣泡排序的思想 對於乙個長度為n的陣列,從小到大進行排序。0 n 1範圍內,兩兩進行比較與交換,結果是最大的元素放在陣列的最後面 即n 1位上 0 n 2範圍內,兩兩進行比較與交換,結果是第二大元素放在最後面 即n 2位上 重複上述過程,直到範圍縮小到只有0位的乙個元素為止。2.例...