常見的排序演算法

2021-09-12 02:33:45 字數 3466 閱讀 7915

1、氣泡排序

主要思想:相鄰元素兩兩比較,對於乙個長度為n的陣列,需要進行n-1趟排序,在第i,i=0,n-1趟排序中,需要進行n-1-i趟比較。主要**如下

#include using namespace std;

int main();

int length = sizeof(array)/sizeof(array[0]);

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

//bubble sort

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

cout<

從整個待排序列中選出乙個元素插入到已經有序的子串行中去,得到乙個有序的、元素加一的子串行,直到整個序列的待插入元素為0,則整個序列全部有序。**如下

#include using namespace std;

int main();

int length = sizeof(array) / sizeof(array[0]);

cout << "unsorted array" << endl;

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

//inserction sort

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

}cout << "sorted array" << endl;

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

return 0;

}

3、選擇排序

基本思想為每一趟從待排序的資料元素中選擇最小(或最大)的乙個元素作為首元素,直到所有元素排完為止。

#include using namespace std;

int main();

int length = sizeof(array) / sizeof(array[0]);

cout << "unsorted array" << endl;

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

// selection sort

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

}//swap

if(i != min)

}cout << "sorted array" << endl;

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

return 0;

}

4、希爾排序

*ref:*

#include using namespace std;

int main();

int length = sizeof(array) / sizeof(array[0]);

cout << "unsorted array" << endl;

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

//shell sort

//increments

for(int gap = length/2; gap > 0 ; gap/=2)}}

cout << "sorted array" << endl;

for(int j = 0 ; j < length ; j++)

return 0;

}

5、歸併排序

主要是分治思想,先將原陣列劃分,排好序,再合併排好序的陣列。

從下往上的歸併排序:將待排序的數列分成若干個長度為1的子數列,然後將這些數列兩兩合併;得到若干個長度為2的有序數列,再將這些數列兩兩合併;得到若干個長度為4的有序數列,再將它們兩兩合併;直接合併成乙個數列為止。這樣就得到了我們想要的排序結果。(參考下面的)

從上往下的歸併排序:它與"從下往上"在排序上是反方向的。它基本包括3步:

① 分解 – 將當前區間一分為二,即求**點 mid = (low + high)/2;

② 求解 – 遞迴地對兩個子區間a[low…mid] 和 a[mid+1…high]進行歸併排序。遞迴的終結條件是子區間長度為1。

③ 合併 – 將已排序的兩個子區間a[low…mid]和 a[mid+1…high]歸併為乙個有序的區間a[low…high]。

#include using namespace std;

void merge(int array, int left,int mid, int right, int temp)else

}while(i <= mid)

while(j <= right)

int p = 0;

while(left <= right)

}void sort(int array, int left, int right , int temp)

}int main();

int length = sizeof(array) / sizeof(array[0]);

cout << "unsorted array" << endl;

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

int temp[length];

sort(array,0,length-1, temp);

cout << "sorted array"<6、快速排序[

設立乙個基準值key=array[left],一般取陣列第乙個元素。設立兩個哨兵,乙個從前往後走,乙個從後往前走。並且右哨兵先動。當碰到比基準數要小的數時,停下來,數值交換,array[left]=array[right],接下來左邊哨兵開始行動,找到第乙個比key大的元素。array[right]=array[left],然後在把key的值賦給左邊,array[left]=key.每一次行動,都會產生兩個子陣列,左邊比key小,右邊比key大,然後遞迴呼叫。即可排好序。

#include using namespace std;

int getindex(int array, int left, int right)

array[left] = array[right];

while(left < right && array[left] <= key)

array[right] = array[left];

}array[left] = key;

return left;

}void fast_sort(int array, int left, int right)

}int main();

int length = sizeof(array) / sizeof(array[0]);

cout << "unsorted array"上述**均在linux下通過編譯且得到正確結果。

常見排序演算法比較如下圖

常見的排序演算法

一 氣泡排序 include include void swap int a,int b void bubblesort int arr,int size int main void bubblesort a,5 for int i 0 i 5 i cout 二 選擇排序 void selectio...

常見的排序演算法

需要包含的標頭檔案 include stdafx.h include include include 氣泡排序是穩定排序 時間複雜度 o n 2 void swap int a,int b void bubblesort int a,int n void printnum int a,int n a...

常見的排序演算法

排序演算法是最基礎,也是最簡單的演算法思想,因為應用場景多,書寫簡單,所以應用較為普遍,所以在面試和考試的時候,都會涉及到排序演算法,雖然排序演算法種類很多,但是只要理解了思想,然後靈活運用,那麼就不難記憶.排序演算法兩個需要記憶和理解的點就是 演算法思想和時間複雜度.下面我們就介紹和分析一下常見的...