//============================================================================ // Name : QuickSort.cpp // Author : Cheng Song // Version : // Copyrigh
//============================================================================ // Name : QuickSort.cpp // Author : Cheng Song // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> using namespace std; void quickSort(int data[],int left,int right){ /****************-----ERROR-----********************* * 開始的時候忘記了if(left<right)語句,導致程式出錯 * 因為如果left開始就不小於right那麼其它的一切操作都沒有意義, * 調用該函數的前提就是滿足left<right ****************************************************/ if(left<right){ int i=left; int j = right; int x = data[i]; while(i<j){ /* * 從右至左尋找第一個小於x的值放到其左邊 */ while(i<j&&data[j]>x) j--; if(i<j) data[i++] = data[j]; /* * 從左至右尋找第一個大於x的值放到其右邊 */ while(i<j&&data[i]<x) i++; if(i<j) data[j--] = data[i]; } /* * 如果i=j那麼就將基準值x放到x=j的位置上, * 然後對調用函數分別排序基準值左部分和右部分 * 分治策略 */ data[i] = x; quickSort(data,left,i-1); quickSort(data,i+1,right); } } void print(int data[],int len){ for(int i = 0;i<len;i++){ cout<<data[i]<<" "; } cout<<endl; } int main() { int data[] = {4,2,6,8,3,1,9,5,7,0,22,12,45,33,4,23,13,16,21,20}; quickSort(data,0,sizeof(data)/sizeof(data[0])-1); print(data,sizeof(data)/sizeof(data[0])); return 0; }