1. 程式人生 > >交換排序之快速排序(五)

交換排序之快速排序(五)

快速排序(Quicksort)是對氣泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列

思路:

思路:隨機選擇陣列的一個元素作為中軸,通過比較將比中軸大的元素放到右側,小的放到左側;通過對左右兩側資料分別遞迴呼叫進行比較
* 1.待排序有陣列a,則令low=0;high=a.length-1;
* 2.隨機選擇陣列的一個元素作為樞軸,此處取temp = a[low],
* 3.將temp與陣列high位置開始向前匹配,直至出現temp>a[high],將a[high]=a[low],
* 4.然後temp與陣列low位置開始向後匹配,直至出現temp<a[high],將a[low]=a[high],
* 5.如此迴圈3,4,直至low=high,終止迴圈,此時a[low]=temp,並返回low,如此low將陣列分為左右兩個子陣列。
* 6.分別對得到的子陣列重複1-5步驟,即遞迴呼叫

程式碼實現如下:

package com.test.sort;

public class QuickSort {

    /**
     * 交換排序之快速排序
     * @param args
     */
    public static void main(String[] args) {
        int [] a = new int[]{12,123,23,1,32,45,32,34,0,23,348,1,2,323};
        int low =0;
        int high = a.length-1;
        quickSort(a, low, high);
//快速排序 for (int i = 0; i < a.length; i++) { if(i==a.length-1){ System.out.print(a[i]); }else{ System.out.print(a[i]+", "); } } } /** * 快速排序 * 思路:隨機選擇陣列的一個元素作為中軸,通過比較將比中軸大的元素放到右側,小的放到左側;通過對左右兩側資料分別遞迴呼叫進行比較 * 1.待排序有陣列a,則令low=0;high=a.length-1; * 2.隨機選擇陣列的一個元素作為樞軸,此處取temp = a[low], * 3.將temp與陣列high位置開始向前匹配,直至出現temp>a[high],將a[high]=a[low], * 4.然後temp與陣列low位置開始向後匹配,直至出現temp<a[high],將a[low]=a[high], * 5.如此迴圈3,4,直至low=high,終止迴圈,此時a[low]=temp,並返回low,如此low將陣列分為左右兩個子陣列。 * 6.分別對得到的子陣列重複1-5步驟,即遞迴呼叫
*/ public static void quickSort(int a[], int low, int high){ int mid = quick(a, low, high);//確定中軸的位置 if(low<high && mid>1){//對左側進行快速排序 quickSort(a, low, mid-1); } if(low<high && mid+1<high){//對右側進行快速排序 quickSort(a, mid+1, high); } } public static int quick(int a[], int low, int high){ int temp = a[low]; while(low<high){ while(low<high){ if(temp>a[high]){ a[low] = a[high]; break; }else{ high--; } } while(low<high){ if(temp<a[low]){ a[high] = a[low]; high--; break; }else{ low++; } } } a[low] = temp; return low; } }