博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
另一种快速排序
阅读量:7065 次
发布时间:2019-06-28

本文共 1108 字,大约阅读时间需要 3 分钟。

  hot3.png

之前 写过一种快速排序,下面是另外一种稍微不同的方法。它分别寻找比中心值 k 小和 k 大的两个元素再进行交换,逻辑更加清晰。

public class QuickSort{    private static void swap(int[] arr, int i, int j)    {        int temp = arr[i];        arr[i] = arr[j];        arr[j] = temp;    }    private static int partition(int[] a, int lo, int hi)    {        int i = lo, j = hi + 1;        while(true)        {            while (a[++i] < a[lo])                if (i == hi) break;            while (a[lo] < a[--j])                if (j == lo) break;            if (i >= j) break;            swap(a, i, j);        }        swap(a, lo, j);        return j;    }    public static void sort(int[] a)    {        // StdRandom.shuffle(a);        sort(a, 0, a.length - 1);    }    private static void sort(int[] a, int lo, int hi)    {        if (hi <= lo) return;        int j = partition(a, lo, hi);        sort(a, lo, j-1);        sort(a, j+1, hi);    }    public static void main(String[] argv)    {        int[] arr = {6, 7, 9, 0, 5, 1, 8, 12};        sort(arr, 0, 7);        for(int i: arr)            System.out.println(i);    }}

参考

转载于:https://my.oschina.net/lvyi/blog/661808

你可能感兴趣的文章
乔春洋:文化资源与文化产业化
查看>>
有关libpthread.so库的问题
查看>>
使用zt-exec库定时清理linux休眠进程
查看>>
比较好用的js文字无缝滚动,支持ff ie678
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
VSAN 和 vSphere Replication 的互操作
查看>>
.NET框架设计—常被忽视的C#设计技巧
查看>>
光云软件一面
查看>>
我的作业,来看看把
查看>>
面试宝典系列-MySQL缓存详解
查看>>
Azure证书生成问题
查看>>
管家婆软件
查看>>
8 quick ways to clear up drive space in Windows 10
查看>>
Apache Zeppelin连接Oracle数据库
查看>>
一张图告诉你,只会jQuery还不够!
查看>>
ios中timer相关的延时调用需要注意的地方
查看>>
王者归来:GNOME 2回来
查看>>
Maven的安装配置
查看>>
存储过程3. 参数的引入
查看>>