package com.redis.order;
import java.util.Arrays;
/**
* 快速排序:
* 基准数:一般就是取要排序的序列的第一个;
* 算法的选择:数据量小的时候选择:插入和冒泡排序
数据量大的时候选择:快速排序
jdk当中的基础类型排序用的是:快速排序.Arrays.Sort
对象排序用的是:归并排序+timeSort(timeSort是一种优化)
*/
public class QuickSort {
public static void main(String[] args) {
//找一个基准数
//与序列的最后一个数进行比较,交换位置
//序列开始的元素与最后的数据进行比较,交换位置
//为什么不一次性走完?
int[] data = {45, 28, 80, 90, 50, 16, 100, 10};
qSort(data,0,data.length-1);
System.out.println(Arrays.toString(data));
}
/**
* @param data 排序的序列
* @param left 左边开始的位置
* @param right 右边开始的位置
*/
public static void qSort(int[] data, int left, int right) {
int basicData = data[left]; //基准数,不能用data[0]
int ll = left; //从前往后的指针 --引用
int lr = right; //从后往前的指针 --引用
while (ll < lr) {
//从后往前找比基准数小的数,如果一直大于就一直循环,小的话交换位置
while (ll < lr && data[lr] >= basicData) {
lr--;
}
if (ll < lr) {
int temp = data[lr];
data[lr] = data[ll];
data[ll] = temp;
ll++;
}
//从前往后找
while (ll < lr && data[ll] <= basicData) {
ll++;
}
if (ll < lr) {
int temp = data[lr];
data[lr] = data[ll];
data[ll] = temp;
lr--;
}
}
//递归,分成了三部分,继续排
if (left < ll) {
qSort(data, left, ll - 1);
}
if (lr < right) {
qSort(data, ll+1, right);
}
}
}
排序算法-快速排序
最新推荐文章于 2023-07-18 17:23:34 发布