1. 程式人生 > >【排序】快速排序

【排序】快速排序

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 int
loc = 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 }

【排序】快速排序