一 氣泡排序
一種簡單的排序演算法,它使用一種「冒泡策略」把最大元素移到最右端。在一次氣泡排序過程中,相鄰元素比較。如果左邊元素大於右邊元素,則交換。
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 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...