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