package com.zxw.test;
import java.util.Arrays;
public class QuickSortTwo {
/**
* 快速排序
* 从序列中随机挑出一个元素,做为基准(pivot,这里选择序列的最左边元素作为基准);
* 重新排列序列,将所有比基准值小的元素摆放在基准前面,所有比基准值大的摆在基准的后面。该操作结束之后,该基准就处于数列的中间位置。这个操作称为分区(partition);
* 递归地把小于基准值元素的子序列和大于基准值元素的子序列进行上述操作即可。
*/
public static void quickSort(int arr[], int left, int right) {
/**
* 如果符合跳出
*/
int i, j, temp,t;
if (left > right) {
return;
}
i = left;
j = right;
/**
* temp是基准位置
*/
temp = arr[left];
while (i < j) {
/**
* 从右往左递减,看右下标,如果右下标大于基准值那就j--
*/
while (i<j && arr[j] >= temp) {
j--;
}
/**
* 从左往右递增,看左下标,如果左下标小于基准值那就i--
*/
while (i<j && arr[i] <= temp) {
i++;
}
/**
* 交换基准元素和重合点的元素
*/
if (i < j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
arr[left] = arr[i];
arr[i] = temp;
/**
*递归调用左半数组
*/
quickSort(arr, left, i - 1);
/**
* 递归调用右半数组
*/
quickSort(arr, i + 1, right);
}
public static void main(String[] args) {
int[] arr = {12, 7, 21, 14, 27, 74, 3, 4, 26, -1, -8, 19, 9};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
}
快速排序(java)
于 2024-04-15 11:47:36 首次发布