快速排序是最常用的一種排序方式了,他是非平穩排序(非平穩指的是排序的時間複雜度不固定)
快速排序主要有挖坑法和指標交換法,這個原理的描述,參考這個** 解釋的很清楚。
主要把指標交換法用c++實現,如下:
主要部分是,設定基準點 partition !!
#include #include using namespace std;
void printarr(int arr, int n)
void swap(int &a, int &b)
//指標交換法
//實現元素的移動,根據基準數,劃分左右區域
int partition(int arr, int left, int right)
//迴圈之外i=j,交換基準點,將基準點交換到遍歷的停止處,即i處
//這樣使當前基準值左邊都是比他小的數,右邊都是比他大的數
swap(arr[i], arr[left]);
return i;
}//通過遞迴的方式,實現分而治之的思想
void quicksort(int arr,int left,int right)
int j=partition(arr,left,right); //設定j為基準點
quicksort(arr, left, j - 1); //左邊遞迴排序
quicksort(arr, j + 1, right); //右邊遞迴排序
}//測試函式
void test()
; int len = sizeof(arr) / sizeof(arr[0]);
cout << "the original array is :" << endl;
printarr(arr, len);
quicksort(arr, 0, len - 1); //注意最後一位!!邊界一定要注意!!
cout << "the sorted array is :" << endl;
printarr(arr, len);
}int main()
排序 快速排序,C 實現
本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...
快速排序 c 實現
快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...
快速排序(C 實現)
include using namespace std void swap int a,int b int sort int begin,int end if beginwhile beginif begin return begin void quicksort int begin,int end...