当前位置: 首页 > news >正文

浅谈排序——快速排序(最常用的排序)

快速排序(Quick Sort)是一种常见的排序算法,由英国计算机科学家东尼·霍尔(Tony Hoare)在1960年发明。这是一种分治算法,基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快速排序算法在平均状况下,排序 n 个项目要 Ο(n log n) 次比较。在最坏状况下则需要 Ο(n^2) 次比较,但这种状况并不常见。实际上,快速排序通常明显比其他 Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地达成。

快速排序的一个优点是它是不稳定的排序算法,意味着相同的元素在排序后可能会保持其原有的顺序。

下面是一个伪代码示例:

快速排序(数组 a, 长度 n)
    如果 n > 1
        选择 a[1] 作为基准值
        左 = 1
        右 = n

        当 左 <= 右
            当 a[右] >= 基准值
                右 = 右 - 1
            当 a[左] <= 基准值
                左 = 左 + 1

        交换 a[左] 和 a[右]

        快速排序(a, 左, 右)
 

在这个算法中,我们选择数组的中位数作为基准值,然后将数组分为两部分,一部分是所有小于基准值的元素,另一部分是所有大于或等于基准值的元素。然后对这两部分递归地进行快速排序。

在实际应用中,快速排序是效率非常高的一种排序算法,尤其是在处理大量数据时。

ok,下面是代码

#include<stdio.h>
int a[100], n;
void qs(int left, int right)
{int i, j, t, temp;if (left > right)return;temp = a[left];i = left;j = right;while (i != j){while (a[j] >= temp && i < j){j--;}while (a[i] <= temp && i < j){i++;}if (i < j){t = a[i];a[i] = a[j];a[j] = t;}}	a[left] = a[i];a[i] = temp;qs(left, i - 1);qs(i + 1, right);
}int main()//快速排序
{int i, j, t;scanf("%d", &n);for (int i =1; i <= n; i++){scanf("%d", &a[i]);}qs(1, n);for (int i = 1; i <= n; i++){printf("%d ", a[i]);}return 0;
}

http://www.lryc.cn/news/258135.html

相关文章:

  • Springboot项目实现简单的文件服务器,实现文件上传+图片及文件回显
  • 5V低压步进电机驱动芯片GC6150,应用于摄像机,机器人 医疗器械等产品中。具有低噪声、低振动的特点
  • 3D Web轻量引擎HOOPS Communicator如何实现对大模型的渲染支持?
  • 『 Linux 』进程地址空间概念
  • PySpark大数据处理详细教程
  • 三(五)ts非基础类型(对象)
  • HeartBeat监控Redis状态
  • FairGuard无缝兼容小米澎湃OS、ColorOS 14 、鸿蒙4!
  • 【Copilot】Edge浏览器的copilot消失了怎么办
  • C++入门【6-C++ 修饰符类型】
  • STP笔记总结
  • Qt开发 之 记一次安装 Qt5.12.12 安卓环境的失败案例
  • 基于SpringBoot的就业信息管理系统设计与实现(源码+数据库+文档)
  • Java面试整理(四)Java IO流
  • 《安富莱嵌入式周报》第328期:自主微型机器人,火星探测器发射前失误故障分析,微软推出12周24期免费AI课程,炫酷3D LED点阵设计,MDK5.39发布
  • 产品经理在项目周期中扮演的角色Axure的安装与基本使用
  • Dockerfile创建镜像介绍
  • Android 滥用 SharedPreference 导致 ANR 问题
  • 虚幻商城 道具汇总
  • docker: Error response from daemon: failed to create shim task: OCI runtime
  • SpringBoot+线程池实现高频调用http接口并多线程解析json数据
  • java实现局域网内视频投屏播放(一)背景/需求
  • 【Spring】手写一个简易starter
  • Spring Cloud Alibaba实践 --Sentinel
  • 使用Mockjs模拟(假数据)接口(axios)
  • 【面试常考题目】五种方法解决“如何在n个无序数组中找出它的中位数(java)”问题
  • 打包CSS
  • Java项目开发,业务比较复杂如何减少bug
  • [EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件
  • map.getOrDefault