快速排序
1.原理
快速排序就是将每一轮的基准数归位,每次选取数组中的第一位元素作为基准数,有两个变量i与j,分别指向队列的最左边和最右边
使用j从右向左遍历,直到找到一个小于基准数的数,使用i从左向右遍历,直到找到一个大于基准数的数,此时将两数进行交换,重复此步骤直至i与j重合
重合时,两个变量重合位置的值必然小于或等于基准数(如果是j从右向左遍历致使二者重合,则重合处数值为上一次交换的小于基准值的值。如果是i从左向右遍历致使二者重合,则重合处数值为本次j所确定的小于基准值的数值)
本次排序完成后,以基准值最新所在位置为中点进行分割,分割为两个数组再次重复上述操作,直到将每次拆分的数组划分为最小
2.代码实现
package com.example.com.controller;
import java.util.Arrays;
public class SortTest {
public static void main(String[] args) {
int[] arr = new int[]{4, 3, 1, 2, 45, 6, 8, 9, 10};
Sort.sort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
}
class Sort {
static void sort(int[] a, int begin, int end) {
if (begin > end) {
return;
}
int base = a[begin];
int i = begin;
int j = end;
while (i != j) {
while (i < j && a[j] >= base) {
j--;
}
while (i < j && a[i] <= base) {
i++;
}
if (i < j) {//交换
int swap = a[i];
a[i] = a[j];
a[j] = swap;
}
}
a[begin] = a[i];
a[i] = base;
sort(a, begin, i - 1);
sort(a, i + 1, end);
}
}

浙公网安备 33010602011771号