比较排序之快速排序(实例代码)

发布时间 - 2026-01-11 02:04:15    点击率:

快速排序(简称快排)因为其效率较高(平均O(nlogn))经常在笔试题中对其考查。

对于快排的第一步是选取一个“基数”,将会用这个“基数”与其它数进行比较交换。而这个“基数”的选择将影响到快排的效率如何,但如果为了选择基数而选择基数则会本末倒置。例如为了找到最佳基数,则需要在整个待排序列中找到中位数,但查找中位数实际上代价又会很高。基数的选择通常来说就是待排序序列中的第一个对象或者中间的一个对象或者最后一个对象。本文以选取第一个元素为例对快排做一个简要分析实现。

以待排序列{6, 5, 3, 1, 7, 2, 4}为例,选取第一个元素6为基数。

选择了基数过后则需要进行和数组元素进行比较交换,如何进行比较和谁进行比较?快排第二步在数组的第一个元素和最后元素各设置一个“哨兵”。

选好基数,设置好哨兵过后,接下来则是开始比较,将基数先与最后一个哨兵j进行比较,如果大于哨兵j则与其进行交换同时哨兵i+1

此时基数不再与哨兵j进行比较,而是与哨兵i进行比较,如果基数大于哨兵i,则哨兵一直向后移,直到大于基数为止交换同时哨兵j-1。

重复上面的步骤,基数再与哨兵j比较。

最终结果可见哨兵i的位置=哨兵j的位置,此时将基数赋值给这个位置。

这样就达到了基数6左边的数字均小于它,右边的数字均大于它,再利用递归对其左右数组进行同样的步骤选取基数,设置哨兵,最后即可完成排序。

java

package com.algorithm.sort.quick;

import java.util.Arrays;

/**
 * 快速排序
 * Created by yulinfeng on 2017/6/26.
 */
public class Quick {
  public static void main(String[] args) {
    int[] nums = {6, 5, 3, 1, 7, 2, 4};
    nums = quickSort(nums, 0, nums.length - 1);
    System.out.println(Arrays.toString(nums));
  }
  
  /**
   * 快速排序
   * @param nums 待排序数组序列
   * @param left 数组第一个元素索引
   * @param right 数组最后一个元素索引
   * @return 排好序的数组序列
   */
  private static int[] quickSort(int[] nums, int left, int right) {
    if (left < right) {
      int temp = nums[left];  //基数
      int i = left;  //哨兵i
      int j = right;  //哨兵j
      while (i < j) {
        while (i < j && nums[j] >= temp) {
          j--;
        }
        if (i < j) {
          nums[i] = nums[j];
          i++;
        }
        while (i < j && nums[i] < temp) {
          i++;
        }
        while (i < j) {
          nums[j] = nums[i];
          j--;
        }
      }
      nums[i] = temp;
      quickSort(nums, left, i - 1);
      quickSort(nums, i + 1, right);
    }
    return nums;
  }
}

Python3

#快速排序
def quick_sort(nums, left, right):
  if left < right:
    temp = nums[left]  #基数
    i = left  #哨兵i
    j = right  #哨兵j
    while i < j:
      while i < j and nums[j] >= temp:
        j -= 1
      if i < j:
        nums[i] = nums[j]
        i += 1
      while i < j and nums[i] < temp:
        i += 1
      if i < j:
        nums[j] = nums[i]
        j -= 1
    nums[i] = temp
    quick_sort(nums, left, i - 1)
    quick_sort(nums, i + 1, right)
  
  return nums

nums = [6, 5, 3, 1, 7, 2, 4]
nums = quick_sort(nums, 0, len(nums) - 1)
print(nums)

以上这篇比较排序之快速排序(实例代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 快速排序  # java  # 快速排序的原理及java代码实现  # 快速排序的深入详解以及java实现  # 第一个  # 对其  # 给大家  # 为例  # 递归  # 则需  # 本末倒置  # 则是  # 较高  # 要在  # 很高  # 希望能  # 做一个  # 为其  # 又会  # 影响到  # 这篇  # 会用  # 第二步  # 则会 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序 require机制详解及实例代码  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何解决hover在ie6中的兼容性问题  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  详解MySQL数据库的安装与密码配置  如何快速查询域名建站关键信息?  如何在阿里云域名上完成建站全流程?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  昵图网官网入口 昵图网素材平台官方入口  Laravel如何配置任务调度?(Cron Job示例)  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Python并发异常传播_错误处理解析【教程】  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Python文件操作最佳实践_稳定性说明【指导】  北京专业网站制作设计师招聘,北京白云观官方网站?  如何用虚拟主机快速搭建网站?详细步骤解析  ,网页ppt怎么弄成自己的ppt?  制作旅游网站html,怎样注册旅游网站?  如何在橙子建站上传落地页?操作指南详解  微信小程序 配置文件详细介绍  如何快速搭建高效香港服务器网站?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何在服务器上配置二级域名建站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Laravel如何使用Collections进行数据处理?(实用方法示例)  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何在企业微信快速生成手机电脑官网?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  浅谈Javascript中的Label语句  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  使用豆包 AI 辅助进行简单网页 HTML 结构设计  JS中对数组元素进行增删改移的方法总结  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel如何实现API资源集合?(Resource Collection教程)  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel如何实现数据库事务?(DB Facade示例)  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Python函数文档自动校验_规范解析【教程】  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何在阿里云香港服务器快速搭建网站?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出