快速排序(最佳化版)

來源:互聯網
上載者:User
#include<iostream>#include<cstdlib>#include<ctime>using namespace std;void swap(int& big, int& small){int temp = big;big = small;small = temp;}int partition(int data[],int left,int right) {int base=data[right];  //以最後一個元素,data[right]為參照物int i=left-1;/*|這裡運用的是觀察者模式,i是一個旁觀者||遊標j從左至右迭代,當if語句只判斷data[j]<base情況|也就是說data[j]>base時的時候只是執行外層for迴圈,並移動遊標j||若序列開始部分的若干資料小於base時,就不執行i和j的值swap()交換。||當arr[j]>base時,執行外層for迴圈。此時區間[0 : i]的取值都是小於base的|且區間[i:j]的值都是大於base的。記著 @_1||當再次出現arr[j]<base時。i += 1 ,由上述@_1得知此時的arr[i]>arr[j],執行交換|繼續for迴圈||當j == right時,for 迴圈結束。此時我們知道:區間[0 : i]的取值|都是要小於區間[i : j]的取值的。記著 @_2||現在由於j迭代到right時已經退出迴圈,此時沒有進行arr[j]和base的比較|也就是沒有進行base和arr[i]的比較。|但我們知道區間[i+1 : j-1]的取值都是大於base的  記著@_3*/ for(int j = left; j < right; j++)    {  if( data[j] <= base)         {i += 1; if (data[i] != data[j]) //畢竟比較兩個數的大小要比複製資料在效率上更高swap(data[i],data[j]); //顯然,不論怎樣,小數值總是要放在左邊的  } } /* |由@_3得知,區間[i+1 : j-1]都是大於base的 |這裡執行一次最佳化,既然arr[i+1]>base |那麼就交換arr[i+1]和base的取值。 |此時的序列中,區間[0 : i]都是小於區間[i : j]的 |但以i為分隔的前後序列都還不是有序的,所以傳回分解符的位置到quicksort |繼續遞迴迭代。 */ swap(data[i+1],data[right]);    return i+1;}void quickSort(int data[], int left, int right){    if (left < right)    {        int index = partition(data, left, right);        quickSort(data, left, index - 1);        quickSort(data, index + 1, right);    }}void main(){srand(unsigned int(time(NULL)));const int size = 100;const int size_seed = 100;int iarray[size];for ( int i = 0; i <= size; i++ )iarray[i] = (rand()%size_seed+ 1);//clock_t begin = clock();quickSort(iarray, 0, size);//clock_t end = clock();//double result = difftime(end, begin);for (int j =0; j <= size; j++ )cout << iarray[j] << " ";/*清空記憶體緩衝區的資料,因為此時資料已經寫入到顯存中*///cout<<"quick sort cost " << result/CLOCKS_PER_SEC << "seconds" << endl;cout.flush();cin.get();}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.