快速排序算法

47 篇文章 5 订阅
订阅专栏
33 篇文章 2 订阅
订阅专栏
9 篇文章 1 订阅
订阅专栏

快速排序算法的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

我们来看看一趟排序中如何将数据划分为两部分,使得左边部分比给定元素小,而右边部分比给定元素大。
首先,我们选定一个数字作为中轴元素用于划分数据,我们选择数据的第一个元素。
然后,我们定义两个指针,分别指向数据的首(i)和尾(j)。从后面(j)元素开始进行比较,如果j指向的元素大于等于中轴元素,则j–,向前移动一位;否则,交换i和j位置的元素。然后,从前面(i)元素比较,如果i指向的元素小于等于中轴,则i++,向后移动一位;否则,交换i和j位置的元素。这样一直循环,知道i==j为止。这样就完成了一次划分,我们选择的中轴元素刚好位于i(此时,i等于j)位置上。

下面是一个示意图:
快速排序

下面给出Java的实现:

package cn.tzy;

import java.util.Arrays;

public class SortAlg {
    public static void main(String[] args) {
        int[] numbers = {5, 1, 6, 7, 0, 4, 2, 3};
        quickSort(numbers, 0, numbers.length - 1);
        System.out.println(Arrays.toString(numbers));
    }

    public static void swap(int[] numbers, int i, int j) {
        if (numbers[i] == numbers[j]) return;
        numbers[i] = numbers[i] ^ numbers[j];
        numbers[j] = numbers[i] ^ numbers[j];
        numbers[i] = numbers[i] ^ numbers[j];
    }

    public static void quickSort(int[] numbers, int low, int high) {
        if (numbers.length < 2) return;
        if (low >= high) return;

        int left = low;
        int right = high;
        int pivot = numbers[low];
        while (left < right) {
            while (left < right && numbers[right] >= pivot) right--;
            swap(numbers, left, right);
            while (left < right && numbers[left] <= pivot) left++;
            swap(numbers, left, right);
        }

        quickSort(numbers, low, right - 1);
        quickSort(numbers, left + 1, high);
    }
}

我们再来看看用Scala的函数式编程思想如何实现:

package cn.tzy

object SortAlg {
  def quickSort(numbers: List[Int]): List[Int] = {
    if (numbers.length < 2) numbers
    else {
      quickSort(numbers.filter(_ < numbers.head)) ++
        numbers.filter(_ == numbers.head) ++
        quickSort(numbers.filter(_ > numbers.head))
    }
  }

  def main(args: Array[String]): Unit = {
    val numbers = List(5, 1, 6, 7, 0, 4, 2, 3)
    println(numbers)
    val sortedNumbers = quickSort(numbers)
    println(sortedNumbers)
  }
}

有没有感受到函数式编程的简介,我们使用filter函数找出比中轴元素小的,然后是中轴元素,再接着是比中轴元素小。短短几行代码就完成了Java很多行代码的功能!

多进程实现快速排序(北京大学操作系统课程实习)
11-22
是北京大学陈向群老师的操作系统课程的实习作业 在 Windows Windows 环境下,编写一 个多进程行快速排序的,使用是包含 1,000 ,000 000个随机数的文件 随机数的文件 随机数的文件
图解快排——快速排序算法(quick sort)
热门推荐
仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。
07-07 3万+
快速排序算法是对冒泡排序算法的一种改进算法,在当前所有内部排序算法中,快速排序算法被认为是最好的排序算法之一。
Java 快速排序算法
07-21
Java 快速排序,目前来说效率很高的一种排序算法,好理解。
多进程多线程快速排序C++源码
04-16
这是在WINDOWS下实现的多进程多线程的快速排序程序,其中为了加快排序速度使用了文件映射技术。
C语言实现快速排序算法
08-27
主要为大家详细介绍了C语言实现快速排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
FPGA并行快速排序算法-位宽可设
11-24
只需两个时钟即可输出12个数据的排序结果,内容简单易懂
Java基于分治法实现的快速排序算法示例
08-28
主要介绍了Java基于分治法实现的快速排序算法,结合实例形式分析了java基于分治法的快速排序相关实现技巧,代码中备有较为详细的注释说明便于理解,需要的朋友可以参考下
算法设计与分析快速排序算法
06-13
算法的学习,分治
java实现快速排序算法
最新发布
06-14
quickSort 方法实现了快速排序算法。通过选取一个基准值,将数组划分为左右两个子数组,并递归调用快速排序对子数组进行排序。在 partition 方法中,我们选择最右边的元素作为基准值,然后使用双指针进行比较和交换...
用多线程进行的序列快速排序
qq_19408603的博客
07-16 1278
本质上是选择最前面的一个数作为分割线,以此为分割。 在此基础上进行迭代,终点关注下使用lambda表达式 [&](T const& t) {return t 然后是使用了partion 和splice两个stl算法里面的代码 下面是原始的快速排序代码 template list sequential_quick_sort(list input) { if (input.empt
快速排序中的分割算法实现
hapjin的专栏
11-11 3493
这里介绍快速排序使用到的两种分割算法。 对于快速排序而言,先选定一个枢轴元素,以枢轴元素为基准比枢轴元素小的元素放在枢轴元素的左边,比枢轴元素大的元素放在枢轴元素的右边。这就是一次分割过程。 1,先介绍第一种分割算法 该算法是《算法导论》中描述的PARTITION过程。这个分割的思想应该有很多应用,比如应用到快速排序中,再比如应用到如果获取中位数(或者给定一组数,找出其中第K小的元素) 该
多线程提升快速排序速度
weixin_43157952的博客
04-12 461
多线程提升快速排序速度快速排序传统代码多线程代码 快速排序 传统的快速排序因为代码会产生递归 ,造成效率的及其底下,并达不到快速排序的效果。所以我想用多线程代替传统的快速排序代码,试试效果!果然非常快哦~。 传统代码 package thread; import java.util.Arrays; /** * Demo class * * @author HengruiLiao * @...
快速排序的原理以及Java代码
一个有梦想的年轻人
07-24 7008
1.概念:所谓排序就是比较两个关键字大小,然后将一个序列的记录从一个位置移动到另一个位置,以达到一个从小到大的有序的序列,快速排序属于交换排序的一种。 2.基本思想:它的基本思想是通过一趟排序,将待排序记录分割成独立的两部分,其中一部分均比关键字小,另一部分均比关键字大,然后对分出来的两部分进行递归排序,直到待排序记录只有一条即可, 3.优势:它的优势是在于排列后的左侧记录不用和右侧的记录再次
快速排序算法Java实现)
anukram的博客
12-08 4072
java实现快速排序(简述)
多线程实现快速排序
Nick
04-28 6327
多线程排序,主要是将整个排序的序列分成若干份,每一个线程排序一份,所以线程排序完成之后,就进行归并,相当于多个有序序列合并成一个有序序列。 这里就需要用到线程屏障,也就是pthread_barrier 系列函数。 屏障,通俗的说就是一个比赛跑步的过程,所以队员就绪了,才能进行比赛。 多线程排序也是,需要每个线程都是排序完成后,才能进行合并的过程。 代码: #include &lt...
快速排序-使用多线程做快速排序
fycghy0803的专栏
05-03 1042
package com.spark; import org.junit.Before; import org.junit.Test; import scala.tools.nsc.Global; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Exe...
第六章第五题(对三个数排序)(Sort three numbers)
xjlovewjh的博客
02-26 1869
下面是参考答案代码: 运行效果: 注:编写程序要养成良好习惯 1.文件名要用英文,具体一点 2.注释要英文 3.变量命名要具体,不要抽象(如:a,b,c等等),形式要驼峰化 4.整体书写风格要统一(不要这里是驼峰,那里是下划线,这里的逻辑段落空三行,那里相同的逻辑段落空5行等等) 5.普通变量,方法名要小驼峰,类名要大驼峰,常量要使用全部大写加上下划线命名法 6.要学习相应的代码编辑器的一些常用快...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • SLF4J: Failed to load class的问题及解决 95909
  • 相关系数r和决定系数R2的那些事 94813
  • LaTex如何输入数集符合(整数集、实数集、复数集) 84519
  • Numpy中找出array中最大值所对应的行和列 78542
  • Numpy中如何给矩阵增加一行或一列 76762

分类专栏

  • Leetcode习题解析 97篇
  • 机器学习笔记 13篇
  • GIS 70篇
  • Python空间数据处理实战 28篇
  • Python 48篇
  • Java 47篇
  • 设计模式学习笔记 19篇
  • JavaFX 6篇
  • Servlet/JSP 7篇
  • C++ 49篇
  • 算法与数据结构 33篇
  • 基本排序算法 9篇
  • 数学(概念与方法) 25篇
  • 数字图像处理 10篇
  • 其它 45篇
  • C# 17篇
  • JavaScript 5篇
  • 计算机日常使用 40篇
  • 数据库 25篇
  • Android 2篇

最新评论

  • PostGIS批量导入栅格数据

    ZVM_hanchan: 感谢,研究了2小时,可算是把代码走通了

  • Windows字体美化指南

    电脑小玩家: 分享已经失效了,能再分享一下吗?谢谢了

  • 内点法

    向你步近 ✨: 案例里面内惩罚函数不应该是ln(8-x1-x2)吗

  • Oracle GeoRaster的初步使用--遥感影像数据导入与导出

    2301_81444714: 前辈你好,请问有没有相关的教程推荐呀,想要了解了解这方面的知识。万般感谢!

  • 正交匹配追踪

    m0_58303124: 你好,请教一下为什么计算最大贡献值时要对基向量进行标准化处理呀

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 关于C++函数返回值的拷贝优化问题
  • 使用JDB调试Java程序
  • Windows下CLion中文乱码问题解决
2023年2篇
2022年6篇
2021年2篇
2020年17篇
2019年22篇
2018年46篇
2017年41篇
2016年49篇
2015年204篇
2014年93篇
2013年7篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家梧州玻璃钢花池生产厂家云南玻璃钢花池定制雅安玻璃钢前台定制广元玻璃钢花箱梧州玻璃钢花箱厂家直销山南玻璃钢造型定制太原玻璃钢装饰制作阳江不锈钢家具厂长春玻璃钢造型公司怀化玻璃钢天花吊顶制造株洲玻璃钢茶几制造日照玻璃钢动物雕塑厂家直销昆明玻璃钢装饰造型定制绍兴玻璃钢装饰造型批发汉中商业美陈价格玉溪玻璃钢机械外壳厂陇南玻璃钢浮雕加工金华玻璃钢垃圾桶批发安阳不锈钢家具哪家好山南玻璃钢花钵批发普洱玻璃钢外壳制造上海玻璃钢雕塑哪家好滁州玻璃钢公仔雕塑价格武汉玻璃钢装饰制造宁波玻璃钢卡通雕塑制造云南不锈钢雕塑多少钱昌都玻璃钢花盆批发抚州玻璃钢天花吊顶制作陕西玻璃钢种植池厂家直销厦门玻璃钢机械外壳生产厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化