1. 程式人生 > 實用技巧 >陣列之快速排序

陣列之快速排序

陣列之快速排序

演算法思想:

  • 分治法:比大小,再分割槽
    1. 從陣列中取出一個數,作為基準數。
    2. 分割槽:將比這個數大於或等於的數全部放在它的右邊,小於它的數放於左邊。
    3. 再對左右區間重複第二步,直到各區間只有一個數。

程式碼實現

package com.sun.base.Array.text;
/**
 * @Author: fei
 * @CreateTime:2020-11-26
 */
import java.util.Arrays;

public class Demo07 {
    public static void main(String[] args) {
        int[] arr = new int[]{9,-4,-9,3,5,7,77,85,98,-85};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    //快速排序
    private static void quickSort(int[] arr,int start,int end) {
        //找出分左右兩區的索引位置,然後對左右兩區分別進行遞迴呼叫
        if(start<end){
            int index = getIndex(arr, start, end);
            quickSort(arr,start,index-1);
            quickSort(arr,index+1,end);
        }
    }

    private static int getIndex(int[] arr,int start,int end) {
        int i=start;
        int j=end;
        int x =arr[i];
        while (i<j){
            //由後向前找比他小的數
            while (i<j&&arr[j]>=x){
                j--;
            }
            if(i<j){
                arr[i]=arr[j];
                i++;
            }
            //由前向後找比他大的值
            while (i<j&&arr[i]<=x){
                i++;
            }
            if(i<j){
                arr[j]=arr[i];
                j--;
            }

        }
        arr[i]=x;
    return i;
    }
}

執行