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

C语言——快速排序

C语言——快速排序

  • 一、 含义
  • 二、算法思想
  • 三、实现步骤
  • 代码实现

一、 含义

快速排序算法是在几种排序算法中效率最高的一个排序算法了,故称为快速排序,它的时间复杂度为:O(nlog2n),相比冒泡排序算法的O(n2)有很大的提升。

二、算法思想

1、选取一个基准元素(一般我们将待排序序列中的第一个元素选取为基准元素)
2、将其他元素与基准元素进行比较,比基准元素大的放到基准元素的右边,比基准元素小的放到基准元素的右边。(以基准元素为中心将元素重新分成两个序列,并返回基准元素的下标)
3、将新生成的两个序列继续执行1和2两步(此处可以用递归实现)

三、实现步骤

快速排序的算法步骤:
1.丛数列中挑出一个元素,一般都是左边的第一个数字,称为基准数;
2.创建两个指针,一个从前往后走,一个从后往前走;
3.先执行后面的指针,找出第一个比基准数小的数字;
4.在执行后面的指针,找出第一个比基准数大的数字;
5.交换两个指针指向的数字;
6.直到两个指针相遇;
7.将基准数跟指针指向的位置的数字交换位置,称之为:基准数归位;
8.第一轮结束后,基准数左边的数字都是比基准数小的,基准数右边的数字都是比基准数大的;
9.把基准数左边的看作是一个序列,把基准数右边的看作一个序列,按照刚刚的规则进行递归排序

代码实现

int main()
{int arr[10] = {9,5,3,8,1,2,6,7,4,10};void quicksort(int a[10],int i,int j);  //函数的声明printf("排列前:");for(int i = 0; i < 10;i++){printf("%d ",arr[i]);}printf("\n");quicksort(arr,0,9);  //调用函数printf("排列后:");for(int i = 0; i < 10;i++){printf("%d ",arr[i]);}system("pause");return 0;
}void quicksort(int a[10],int first,int end)
{if(first > end)  //递归结束条件{return;}int i = first,j = end,flag = a[i],exchange = 0;while(i != j){while(i < j && a[j] > flag)//只找小的,等于要过滤,找前判断right有没有走过{j--;}while(i < j && a[i] <= flag){i++;}if(j > i){exchange = a[i];a[i] = a[j];a[j] = exchange;}}a[first] = a[i];a[i] = flag;quicksort(a,first,i - 1);quicksort(a,i + 1,end);
}

总结:快速排序优点:排列速度快,比较简单;缺点:不稳定(如果数组是递增的有序数组,对它用快速排序需要N^2/2次操作)。

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

相关文章:

  • FP独立站获客秘籍大揭秘:简单高效,一看就会!
  • 英伟达tx2光驱烧录功能支持
  • 关于stm32(CubeMX+HAL库)的掉电检测以及flash读写
  • Elastic script_score的使用
  • 【Spring Boot 3】获取已注入的Bean
  • C# 对于点位置的判断
  • 最新CLion + STM32 + CubeMX 开发环境搭建
  • 【Python3】观察者模式
  • HTML5 Web Worker之性能优化
  • 应对恶意IP攻击的有效方法
  • 如何使用“Docker registry创建本地仓库,在服务器之间进行文件push和pull”?
  • Rocky Linux - Primavera P6 EPPM 安装及分享
  • API 管理调研
  • 在centOS服务器安装docker,并使用docker配置nacos
  • JVM运行时数据区概述以及分别存放的内容
  • 数据体系规范化
  • 从政府工作报告探计算机行业发展
  • 【软件工具】网络性能测试工具 Iperf
  • Day32:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期
  • C语言下使用SQL语言
  • Gitea相关漏洞
  • 基于深度学习的图像去雨去雾
  • 使用JS的for循环实现九九乘法表
  • Leetcode 70 爬楼梯
  • 基于SpringBoot+MYSQL+Vue的校园管理系统
  • Oracle P6 负浮时和必须完成日期
  • 【C++】STL--String
  • 深入理解与使用go之中间件--实现
  • 移动端研发技术的进化历程
  • ChromeDriver 122 版本为例 国内下载地址及安装教程