演算法導論學習筆記——快速排序演算法

來源:互聯網
上載者:User
/** * 快速排序演算法:分解:資料arr[p..r]被劃分成兩個(可能空)的子數組arr[p..q-1]和arr[q+1..r] *                    使得arr[p..q-1]中的每個元素都小於等於arr(q),而arr[q+1..r]中的每個元素大於等於arr[q] *              解決:通過遞迴調用快速排序,對子數組arr[p..q-1]和arr[q+1..r]排序 *              合并:因為兩個子數組是就地排序,將它們合并不需要操作:整個數組arr[p..r]已排序 */public class QuickSort {/** * 選擇arr[r]作為主元,將比arr[r]小的元素放在arr[r]前面(這裡記為小元素部分), * 將比arr[r]小的元素放在arr[r]後面(這裡記為大元素部分) * @param arr * @param p    分解的開始元素位置 * @param r    分解的結束元素位置 */static int partition(int arr[],int p,int r){//i為小元素部分中下標最大的位置,也就是它的下一個位置(即i+1)就是大元素部分下標最小的位置,初始化為p的前一個位置int i = p-1;//從p個元素開始,一直檢查到r前面的一個元素for(int j= p;j<r;j++){//如果arr[j]是比arr[r]小的元素,要放在小元素位置,由於i標記的是小元素部分下標最大的位置,//所以arr[j]應該被換到i+1的位置if(arr[j]<arr[r]){i++;int temp = arr[i];arr[i]= arr[j];arr[j]= temp;}}//最後把arr[r]放在小元素部分和大元素部分中間int tem = arr[r];arr[r] = arr[i+1];arr[i+1]=tem;return i+1;}/** * 外層的排序函數,先分解,然後再遞迴調用quickSort排序函數對分解的兩部分進行排序 * @param arr * @param p * @param r */static void quickSort(int arr[],int p,int r){if(p<r){int q = partition(arr,p,r);quickSort(arr,p,q-1);quickSort(arr,q+1,r);}}//測試.....public static void main(String[] args) {int arr[] = {2,8,7,1,3,5,6,4};quickSort(arr,0,arr.length-1);for(int i = 0;i<arr.length;i++)System.out.println(arr[i]);}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.