三向快速排序

匿名 (未验证) 提交于 2019-12-03 00:36:02

个人简介,并不绝对,如有错误,敬请指出,谢谢:)

public static void sort(int[] a) {

a, 0, a.length - 1);

private static void sort(int[] a, int left, int right) {

if (left >= right) return;

//当左边界大于右边界直接返回不作处理。

int v = a[left], le = left, index = left + 1, ri = right;

//我们拿到左边界的副本,右边界的副本,取第一个元素为比较元素,比较元素的下一个元素作为索引元素。

while (index <= ri) {

//当索引<=右边界时进行处理

if (a[index] < v) {

a, index++, le++);

//如果遇到的元素小于比较元素的话,把这个元素与左边界互换。

//简单的理解就是把小于比较元素的那个元素,都往左边挪动,然后索引+1,表示应该比较下一个元素了。

//随后,会对以原左边界和现左边界划分的元素进行又一次三向快速排序。

else if (a[index] > v) {

a, index, ri--);

//如果遇到的元素大于比较元素的话,把这个元素与右边界互换。

//总而言之就是像快拍一样,小的放左边,大的放右边。

else {

index++;

//在比较元素等于索引元素的情况下,索引自增,取新的索引元素。

//System.out.println(Arrays.toString(a));

a, left, le - 1);

//对左边界的元素进行三向快排

a, ri + 1, right);

//对右边界的元素进行三向快排

private static void swap(int[] a, int i, int j) {

int t = a[i];

a[i] = a[j];

a[j] = t;

public static void main(String[] args) {

int[] a = {1,5,7,8,2,3};

//如果我们查看输出结果的话,会看到如下结果

//[1, 7, 8, 2, 3, 5]

//[1, 5, 2, 3, 7, 8]

//[1, 2, 3, 5, 7, 8]

sort(a);

System.out.println(Arrays.toString(a));

文章来源: 三向快速排序
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!