OJ刷題---分治法快速排序
阿新 • • 發佈:2019-01-09
輸入程式碼:
//演算法分析 //1)設定兩個變數I、J,排序開始的時候:I=0,J=N-1; //2)以第一個陣列元素作為關鍵資料,賦值給key,即 key=A[0]; //3)從J開始向前搜尋,即由後開始向前搜尋(J=J-1即J--),找到第一個小於key的值A[j],A[j]與A[i]交換; //4)從I開始向後搜尋,即由前開始向後搜尋(I=I+1即I++),找到第一個大於key的A[i],A[i]與A[j]交換; //5)重複第3、4、5步,直到 I=J; (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j-完成的最後另迴圈結束。) #include <iostream> using namespace std; void Quicksort(int a[],int low,int high) { if(low>=high) { return ; } int first=low; int last=high; int key=a[first]; while(first<last) { while(first < last && a[last] >= key) { --last; } a[first] = a[last]; while(first < last && a[first] <= key) { ++first; } a[last]=a[first]; } a[first]=key; Quicksort(a,low,first-1); Quicksort(a,last+1,high); } int main() { int i,a[100],x,n=0; cin>>n; for(i=0; i<n; i++) cin>>a[i]; Quicksort(a,0,n-1); for(i=0; i<=n-1; i++) cout<<a[i]<<" "; cout<<endl; return 0; }
執行結果: