快三排序算法


快速排序(Quicksort)是對冒泡排序的一種改進。

快速排序由C. A. R. Hoare1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

快速排序是C.R.A.Hoare1962年提出的一種划分交換排序。它采用了一種分治的策略,通常稱其為分治法(Divide-and-ConquerMethod)

 

該方法的基本思想是:

1.先從數列中取出一個數作為基准數。

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

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

 

雖然快速排序稱為分治法,但分治法這三個字顯然無法很好的概括快速排序的全部步驟。因此我的對快速排序作了進一步的說明:挖坑填數+分治法。

//快速排序 void quick_sort(int s[], int l, int r) {    if (l < r)    { //Swap(s[l], s[(l + r) / 2]); //將中間的這個數和第一個數交換 參見注1        int i = l, j = r, x = s[l];        while (i < j)        {            while(i < j && s[j] >= x) // 從右向左找第一個小於x的數         j--;              if(i < j) s[i++] = s[j];            while(i < j && s[i] < x) // 從左向右找第一個大於等於x的數 i++;              if(i < j) s[j--] = s[i];        }        s[i] = x;        quick_sort(s, l, i - 1); // 遞歸調用        quick_sort(s, i + 1, r);    } }

 

參考:https://blog.csdn.net/morewindows/article/details/6684558

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM