快速排序

快速排序


1.先從數列中取出一個數作爲基準數。

2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有一個數。


  1. //快速排序  

  2. void quick_sort(int s[], int l, int r)  

  3. {  

  4.     if (l < r)  

  5.     {  

  6.         //Swap(s[l], s[(l + r) / 2]); //將中間的這個數和第一個數交換 參見注1  

  7.         int i = l, j = r, x = s[l];  

  8.         while (i < j)  

  9.         {  

  10.             while(i < j && s[j] >= x) // 從右向左找第一個小於x的數  

  11.                 j--;    

  12.             if(i < j)   

  13.                 s[i++] = s[j];  

  14.               

  15.             while(i < j && s[i] < x) // 從左向右找第一個大於等於x的數  

  16.                 i++;    

  17.             if(i < j)   

  18.                 s[j--] = s[i];  

  19.         }  

  20.         s[i] = x;  

  21.         quick_sort(s, l, i - 1); // 遞歸調用   

  22.         quick_sort(s, i + 1, r);  

  23.     }  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章