今日代码大赏 | Java 实现快速排序算法

今天依旧老规矩,我们先来一段每日古典回顾,为生活增添一丝趣味,感受古人的毅力和智慧。

今日的古典回忆是:“谁能九层台,不用累土起!”

这句话出自唐代诗人王之涣的《登鹳雀楼》,这句诗的意思是,有谁能够建造一座九层高的楼台,却不是从堆积一层层的土开始的呢?

所以我们无论是在学习、工作还是生活的其他方面,都需要我们一步一个脚印,扎实地做好每一件事情,才能最终取得成功。

前两天的文章投票,我看到投“ so easy,毫无压力!”的较多,所以今天我们继续上点难度,回忆下用 Java 实现快速排序算法。

是不是看到这里小伙伴们有点熟悉呢。没错,前两天我们分析了 Java 实现冒泡排序算法。

有需要回忆的 Java 实现冒泡排序算法可以点击下方链接,直接跳转哦!

https://mp.weixin.qq.com/s/k5iKu6mdrdUtJFTmbGavhA

Java 程序实现快速排序算法示例代码:

//用Java快速排序
import java.util.Arrays;

class Main {

  //根据数据轴划分数组
  int partition(int array[], int low, int high) {

    //选择最后一个元素作为轴
    int pivot = array[high];

    //初始化第二个指针
    int i = (low - 1);

    //把小于轴的元素放在左边
    //大于枢轴右侧的枢轴
    for (int j = low; j < high; j++) {

       //将所有元素与pivot进行比较
       //交换大于pivot的元素
       //元素小于pivot
       //按降序排序
      // if (array[j] >= pivot)
      if (array[j] <= pivot) {

        //第二个指针递增。
        //将较小的元素替换为较大的元素
        i++;
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
      }
    }

        //所以左边的元素更小
        //右边的元素大于pivot
    int temp = array[i + 1];
    array[i + 1] = array[high];
    array[high] = temp;
    return (i + 1);
  }

  void quickSort(int array[], int low, int high) {
    if (low < high) {

       //选择轴位置并将所有元素放小
       //左轴大于轴,右轴大于轴
      int pi = partition(array, low, high);

      //对轴左侧的元素进行排序
      quickSort(array, low, pi - 1);

      //对轴右侧的元素进行排序
      quickSort(array, pi + 1, high);
    }
  }

  public static void main(String args[]) {

    //创建一个未排序的数组
    int[] data = { 8721096 };
    int size = data.length;

    //创建Main类的对象
    Main qs = new Main();

    //将第一个和最后一个索引传递给数组
    qs.quickSort(data, 0, size - 1);
    System.out.println("排序数组: ");
    System.out.println(Arrays.toString(data));
  }
}

运行该程序时,输出结果为:

未排序的数组:
[8, 7, 2, 1, 0, 9, 6]
排序数组:
[0, 1, 2, 6, 7, 8, 9]

在这里,数组的元素按升序排序。如果我们想要按降序对元素进行排序,那么在 Partition() 方法的 for 循环中,我们可以将代码更改为:

//小于符号更改为大于
if (array[j] >= pivot) {

今天的代码大赏到此结束,关于 Java 程序实现快速排序算法,你学会了吗?

欢迎在评论区留下自己的看法。

完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!

在线访问:https://www.codecopy.cn/post/plyxee

在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~

往期推荐

今日代码大赏 | Java 使用递归反转句子

今日代码大赏 | Java 实现字符串转为日期

今日代码大赏 | Java 实现冒泡排序

今日代码大赏 | Java 打印数组

今日代码大赏 | Java 反转数字

相关推荐

  • 奇安信的年终奖,出乎了所有人意料!
  • 小孩子也能看懂的线性回归算法
  • 西工大等提出大模型多智能体框架CRSEC,揭开AI社会的社交奥秘
  • 拷打大模型!首个基于弱智吧贴文的大模型谬误理解评测基准
  • 【社会招聘】快手大模型中心_大模型算法专家
  • 大厂数仓模型设计及工具模板
  • 时间序列 AI 技术与大模型:蚂蚁集团的实践与应用探索
  • 万亿数据的电商平台,如何做存储?
  • XAI有什么用?探索LLM时代利用可解释性的10种策略
  • Meta宣布全新训推一体加速器:完全集成PyTorch 2,性能3倍提升
  • 为什么要纯C语言手搓GPT-2,Karpathy回应网友质疑
  • 史上首位阿贝尔奖、图灵奖双得主!2023图灵奖授予随机性大佬Avi Wigderson
  • 若通过验证可颠覆美国后量子密码设计,清华陈一镭预印论文破解格密码
  • 长文本杀不死RAG:SQL+向量驱动大模型和大数据新范式,MyScale AI数据库正式开源
  • 更好、更安全、更不依赖OpenAI,微软的AI新动向,推出大模型安全工具Azure AI
  • 编程的“Devin AI 时代”,软件开发者的喜与忧
  • 从AIGC到AGI,为什么我们需要更多的“技术信仰派”?
  • 「大模型+强化学习」最新综述!港中文深圳130余篇论文:详解四条主流技术路线
  • 量子计算可靠性提升800倍!微软开启2级弹性量子计算新时代
  • 史上首次,AI超越人类奥赛金牌得主!吴方法加持,30题做出27道破纪录