陣列之快速排序
阿新 • • 發佈:2020-11-30
陣列之快速排序
演算法思想:
- 分治法:比大小,再分割槽
- 從陣列中取出一個數,作為基準數。
- 分割槽:將比這個數大於或等於的數全部放在它的右邊,小於它的數放於左邊。
- 再對左右區間重複第二步,直到各區間只有一個數。
程式碼實現
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; } }