【排序】快速排序
阿新 • • 發佈:2018-04-07
part 大於 元素 quicksort 覆蓋 轉載 tor partition ref
原創博文,轉載請註明出處!
本文代碼的github地址
# 基本思想
”快速排序“是對”冒泡排序“的改進。
基本原理:基於分治法,在待排線性表中取一個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞歸對兩個子表做快速排序。
# C++代碼
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 // 一次快速排序 6 int partition(vector<int> &a, int low, int high) 7 { 8 // 樞軸值(線性表第一個元素作為樞軸值) 9 int key = a[low]; 10 while(low < high) 11 { 12 // 從右側中找小於pivot的值,然後覆蓋low位置 13 while(low < high && a[high] >= key) 14 --high; 15 a[low] = a[high]; 16 17 // 從左側中找大於pivot的值,然後覆蓋high位置18 while(low < high && a[low] <= key) 19 ++low; 20 a[high] = a[low]; 21 } 22 a[low] = key; 23 return low; 24 } 25 26 //快速排序的遞歸形式 27 void QuickSort(vector<int> &a, int low, int high) 28 { 29 if(low < high) 30 { 31 intloc = partition(a, low, high);//一趟排序結果的調用 32 QuickSort(a, low, loc-1); 33 QuickSort(a, loc+1, high); 34 } 35 } 36 int main() 37 { 38 vector<int> a={46,79,56,38,40,84}; 39 QuickSort(a, 0, a.size()-1); 40 for(int i=0;i<a.size();++i) cout<<a[i]<<‘ ‘; 41 return 0; 42 }
【排序】快速排序