八大排序算法之快速排序算法(JAVA)

快速排序(quickSort)
基本思想: 通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
**:對於基準元素的選取,也可以採用隨機數選取的方式
**:如果要按照元素在位置上的中間來選取基準元素,還可以將中間位置上的元素與第一個元素進行對換


步驟:
將兩個指針i,j分別指向表的起始和最後的位置。
反覆操作以下兩步:
(1)j逐漸減小,並逐次比較j指向的元素和目標元素的大小,若p(j)<T則交換位置。
(2)i逐漸增大,並逐次比較i指向的元素和目標元素的大小,若p(i)>T則交換位置。
直到i,j指向同一個值,循環結束

代碼:



package com.sunMac.eightSort;

public class quickSort {
public static void main(String[] args) {
int []array=new int[]{66,13,51,76,81,26,57,69,23};
sortarray(array);
}
//外部接口方法
public static void sortarray(int[]array){
int startI=0;
int endJ=array.length-1;
sortCore(array, startI, endJ);
}
//快速排序方法(遞歸)
private static void sortCore(int[] array, int startIndex, int endIndex) {
if (startIndex >= endIndex) {
return;
}
int boundary = boundary(array, startIndex, endIndex);
sortCore(array, startIndex, boundary - 1); //遞歸排序基準元素左側
sortCore(array, boundary + 1, endIndex); //遞歸排序基準元素右側
}
//一趟排序的方法
private static int boundary(int[] array, int startIndex, int endIndex) {
int standard = array[startIndex]; // 定義排序基準
int leftIndex = startIndex; // 左指針
int rightIndex = endIndex; // 右指針
while(leftIndex < rightIndex) {
while(leftIndex < rightIndex && array[rightIndex] >= standard) {
rightIndex--;
} //從後往前找小於基準值得元素
array[leftIndex] = array[rightIndex]; //交換
while(leftIndex < rightIndex && array[leftIndex] <= standard) {
leftIndex++;
} //從前往後找大於基準值的元素
array[rightIndex] = array[leftIndex]; //交換
}
array[leftIndex] = standard; //改變起始指針指向當前基準元素所處位置
// for(int i=0;i<array.length;i++)
// System.out.print("--->"+array[i]);
// System.out.println();
return leftIndex; //返回基準元素的當前位置
}
}