排序演算法總結

2021-07-15 01:18:15 字數 2583 閱讀 4062

一  氣泡排序

一種簡單的排序演算法,它使用一種「冒泡策略」把最大元素移到最右端。在一次氣泡排序過程中,相鄰元素比較。如果左邊元素大於右邊元素,則交換。

void bubble(int a,int n)}}

以上氣泡排序效率不高

如 對  進行排序,第一步結束後為  第二步後為,其實已經結束,但是上面程式還有進行不必要的比較

改進後

bool bubble(int a,int n)	}}

void bullesort(int a,int n)

冒泡的時間複雜度為o(n

2),空間複雜度o(1)。穩定。

二 快速排序 

實現**

int partition(int data,int length,int start,int end)

快速排序時間複雜度為o(nlog2n),空間複雜度o(nlog2n),但是不穩定。快速排序平時用得比較多,比如algorithm裡面的sort就是快速排序。

#include

void sort( iterator start, iterator end );

void sort( iterator start, iterator end, strictweakordering cmp );

但是它不適合對鏈式結構進行排序。

當輸入陣列的所有元素都一樣時,不管是快速排序還是隨機化快速排序的複雜度都為o(n^2)

三  簡單選擇排序

基本思想就是每次遍歷,選出值最大的資料,依次放在已排序好的數列後面,直到全部記錄排完為止。如果有n個資料,那個需要遍歷n-1遍

void selectionsort(int a,int n)

swap(a[max],a[size-1]);

}}

儘管與氣泡排序同為o(n^2),但簡單選擇排序的效能要略優於氣泡排序。

上述方法有缺點,即使元素有序仍舊會執行,為去除不必要迭代,在找最大元素時,同時檢查陣列是否已經有序。

void selectsort(int  num,int n)

swap(num[size-1],num[max]);

}}

四 插入排序

插入排序是一種簡單直觀的排序演算法,它的工作原理是通過建有序序列,對於沒有排序的資料,在已排序序列中從後往前掃瞄,找到相應位置,並插入。故,如果是陣列這樣的連續空間的資料序列,那就每次插入都要將其位置的後面資料都向後移動。

//插入排序

void insertsort(int a, int n)

a[j + 1] = temp;

} }}

每次a[i]先和前面乙個資料a[i-1]比較,如果a[i]>a[i-1]說明a[0...i]也是有序的,無序調整,否則就令j=i-1,temp=a[i],然後一邊將資料a[j]向後移動一邊向前搜尋,當有資料a[j]

時間複雜度也為o(n^2), 比冒泡法和選擇排序的效能要更好一些
五 歸併排序

//歸併排序核心

void mergesort(int a,int start,int mid ,int end,int num)

else

}while (i<=mid)

while (j <= end)

for (int i = start; i <=end;i++) }

void mergesort1(int a, int start, int end, int num)

}

六 桶排序

桶排序是一種效率很高的排序演算法,它的時間複雜度為o(n),但桶排序有一定的限制,只有當待排序序列的元素為0到某一確定取值範圍的整數時才適用,典型的例子比如成績的排序等。

演算法思想:

設待排序序列的元素取值範圍為0到m,則我們新建乙個大小為m+1的臨時陣列並把初始值都設為0,遍歷待排序序列,把待排序序列中元素的值作為臨時陣列的下標,找出臨時陣列中對應該下標的元素使之+1;然後遍歷臨時陣列,把臨時陣列中元素大於0的下標作為值按次序依次填入待排序陣列,元素的值作為重複填入該下標的次數,遍歷完成則排序結束序列有序。

void bucketsort(int *a,int length,int max)

for (int i = 0; i <=length - 1;i++)

int index = 0;

for (int i = 0; i <=max;i++) }

}

int main()

; bucketsort(a,10,10);

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

return 0;

}

七 希爾排序

看到一篇感覺很好鏈結

八  堆排序

根據此篇部落格學習

排序演算法總結

1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...

排序演算法總結

1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...

排序演算法總結

學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...