快速排序(c语言代码实现)

news2024/12/24 2:01:03

交换排序:快速排序(不稳定的排序)

快速排序(Quick Sort)是一种常见的排序算法,它采用分治法的思想,对待排序序列进行划分,使得划分出的子序列可以分别进行排序,最终使整个序列有序。快速排序的最好情况下的时间复杂度为:O(nlogn),最坏时间复杂度:O(n^2),是一种高效的排序算法。快速排序是所有内部排序算法中平均性能最优的排序算法

快速排序的具体实现:

  1. 选择一个基准元素,一般选择第一个元素作为基准元素;
  2. 将序列分为两部分,一部分是所有比基准元素小的元素,另一部分是所有比基准元素大的元素;
  3. 对两个子序列进行递归排序,直到子序列长度为1,排序完成。

代码如下

int part(int arr[], int low, int high)
{
	int pivot = arr[low];//将当前表中的第一个元素设为枢轴,对表进行划分
	while (low < high)//循环跳出条件
	{
		while (low < high && arr[high] >= pivot)
			--high;
		arr[low] = arr[high];//将比枢轴小的元素移动到左端
		while (low < high && arr[low] <= pivot)
			++low;
		arr[high] = arr[low];//将比枢轴大的元素移动到右端
	}
	arr[low] = pivot;//枢轴元素存放到最终位置
	return low;//返回存放枢轴的最终位置
}
void quicksort(int arr[], int low, int high)
{
	if (low < high)
	{
		int pivot = part(arr, low, high);
		quicksort(arr, low, pivot-1);//依次对两个子表进行递归排序
		quicksort(arr, pivot+1, high);
	}
}

完整测试代码

#include<stdio.h>
int part(int arr[], int low, int high)
{
	int pivot = arr[low];//将当前表中的第一个元素设为枢轴,对表进行划分
	while (low < high)//循环跳出条件
	{
		while (low < high && arr[high] >= pivot)
			--high;
		arr[low] = arr[high];//将比枢轴小的元素移动到左端
		while (low < high && arr[low] <= pivot)
			++low;
		arr[high] = arr[low];//将比枢轴大的元素移动到右端
	}
	arr[low] = pivot;//枢轴元素存放到最终位置
	return low;//返回存放枢轴的最终位置
}
void quicksort(int arr[], int low, int high)
{
	if (low < high)
	{
		int pivot = part(arr, low, high);
		quicksort(arr, low, pivot-1);//依次对两个子表进行递归排序
		quicksort(arr, pivot+1, high);
	}
}
int main()
{
	int i = 0;
	int arr[7] = { 49,38,65,98,76,13,27 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	printf("原始数组为:");
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	quicksort(arr, 0, sz - 1);
	printf("\n快速排序之后的数组为:");
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python OpenCV剪裁图片并修改对应的Labelme标注文件

Python OpenCV剪裁图片并修改对应的Labelme标注文件 前言前提条件相关介绍实验环境剪裁图片并修改对应的Labelme标注文件代码实现 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入Python日常小操作专栏、OpenCV-P…

RAG之微调垂域BGE的经验之谈

文章目录 前言数据格式部分代码训练参数接下来的尝试总结 前言 随着大模型的爆火&#xff0c;很多垂域行业都开始使用大模型来优化自己的业务&#xff0c;最典型的方法就是RAG&#xff08;检索增强生成&#xff09;了。简单来说就是利用检索技术&#xff0c;找出与用户问题相关…

一、PHP环境搭建[phpstorm]

一、安装 1.php编写工具 地址&#xff1a;https://www.jetbrains.com/phpstorm/download/#sectionwindows 图示&#xff1a; 2.php环境 解释&#xff1a;建议使用phpstudy进行安装&#xff0c;安装较为简单 链接&#xff1a;https://www.xp.cn/ 图示&#xff1a; 二、第…

四、W5100S/W5500+RP2040树莓派Pico<TCP Server数据回环测试>

文章目录 1. 前言2. 协议简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. TCP Server数据回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 在计算机网络中&#xff0c;TCP Server是不可或缺的角色&#xff0c;它…

APP逆向基础(APK流程)

APK的基本结构 Android体系结构和APK基本结构-CSDN博客 APK 打包流程 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )_adnroid 安装包优化,打指定资源_韩曙亮的博客-CSDN博客 APK安装流程

Linux下根目录都包含什么? 每个文件什么作用?

bin: binary, 二进制文件目录, 存储了可执行程序, 系统的命令对应的可执行程序都在这个目录中 sbin: super binary, root用户使用的一些二进制可执行程序 home: 存储了普通用户的家目录&#xff0c;家目录名和用户名相同 opt: 第三方软件的安装目录 &#xff08;交叉编译等…

【tio-websocket】9、服务配置与维护—TioConfig

场景 我们在写 TCP Server 时,都会先选好一个端口以监听客户端连接,再创建N组线程池来执行相关的任务,譬如发送消息、解码数据包、处理数据包等任务,还要维护客户端连接的各种数据,为了和业务互动,还要把这些客户端连接和各种业务数据绑定起来,譬如把某个客户端绑定到一…

2001-2021年省、上市公司五年规划产业政策整理代码+匹配结果

2001-2021年省、上市公司五年规划产业政策整理代码匹配结果 1、时间&#xff1a;2001-2021年 2、来源&#xff1a;整理自wind、国民经济和社会发展五年规划纲要 3、指标&#xff1a; 上市公司数据指标&#xff1a; 国家代码、证券代码、证券简称、公司全称、公司英文全称、…

运行 Python 脚本/代码的几种方式

哈喽大家好&#xff0c;我是咸鱼 我们知道&#xff0c;python 脚本或者说 python 程序其实是一个包含了 python 代码的文件。要让它们实现特定功能&#xff0c;我们需要知道该如何运行&#xff08;run&#xff09;它 通过运行 python 代码&#xff0c;我们可以验证脚本/程序是…

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)

这是继之前文章&#xff1a; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;一&#xff09; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;二&…

JAVA设计模式详解(独家AI解析)

JAVA设计模式详解&#xff08;独家AI解析&#xff09; 一、JAVA介绍二、JAVA设计模式六大原则三、JAVA设计模式介绍四、JAVA设计模式详解4.1 单例模式4.1.1 懒汉式&#xff08;Lazy Initialization&#xff09;4.1.2 饿汉式&#xff08;Lazy Initialization&#xff09; 4.2 代…

本地化ddddocr库,完成验证码图片识别,完整流程

1.pycharm-3.8环境&#xff0c;代码&#xff0c;ddddocr库&#xff0c;以及测试图片 2.代码&#xff1a; import ddddocr ocr ddddocr.DdddOcr(oldTrue) with open("1.jpg", rb) as f:image f.read() res ocr.classification(image) print(res)3.完整打包&#…

sheng的学习笔记-【中】【吴恩达课后测验】Course 3 - 结构化机器学习项目 - 第二周测验

课程3_第2周_测验题 目录&#xff1a;目录 要解决的问题 ① 为了帮助你练习机器学习的策略&#xff0c;本周我们将介绍另一个场景&#xff0c;并询问你将如何行动。 ② 我们认为这个在机器学习项目中工作的“模拟器”将给出一个任务&#xff0c;即领导一个机器学习项目可能…

教师必备宝藏,强烈推荐

亲爱的教师朋友们&#xff0c;你们是不是在为学期末成绩查询而头疼呢&#xff1f;一学期下来&#xff0c;成堆的试卷和成绩单&#xff0c;还有学生家长的各种咨询&#xff0c;让人应接不暇。现在&#xff0c;我给你们分享一个教师必备的宝藏&#xff0c;让你们的成绩查询工作变…

Mac虚拟机哪个好用,CrossOver23.6虚拟机激活许可证激活码2023最新分享

刚买了苹果电脑的用户&#xff0c;经常会因为用不惯苹果系统而想换Windows系统&#xff0c;实际上也的确是&#xff0c;许多流行游戏或软件都暂不支持Mac系统&#xff0c;可行的办法是安装Mac虚拟机或是双系统&#xff0c;以供支持在苹果电脑上使用Windows应用。下面本文就来讲…

小程序如何设置自取规则

​在小程序中&#xff0c;自取规则是指当客户下单时选择无需配送的情况下&#xff0c;如何设置相关的计费方式、指定时段费用、免费金额、预定时间和起取金额。下面将详细介绍如何设置这些规则&#xff0c;以便更好地满足客户的需求。 在小程序管理员后台->配送设置->自…

JavaScript进阶 第二天笔记

JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用&#xff0c;体会 JavaScript 一切皆对象的语言特征&#xff0c;掌握常见的对象属性和方法的使用。 了解面向对象编程中的一般概念能够基于构造函数创建对象理解 JavaScript 中一切皆对象的语言特征理解引用…

Vue中的加密方式(js-base64、crypto-js、jsencrypt、bcryptjs)

目录 1.安装js-base64库 2. 在Vue组件中引入js-base64库 3.使用js-base64库进行加密 4.Vue中其他加密方式 1.crypto-js 2.jsencrypt 3.bcryptjs 1.安装js-base64库 npm install js-base64 --save-dev 2. 在Vue组件中引入js-base64库 import { Base64 } from js-ba…

springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作

第一步&#xff1a;在mongodb的官网里面创建云服务器 点进去 这是免费的&#xff0c;由于是一个项目只可以创建一个&#xff0c;这里我已经创建好了 用本地的mongodb服务也是可以的 第二步&#xff1a;点击connect,下载连接mongodb的软件&#xff1a;MongoDBCompass 第三步&am…

钉钉小程序生态6—钉钉OA自定义审批流的创建和使用

文章导航 钉钉小程序生态1—区分企业内部应用、第三方企业应用、第三方个人应用 钉钉小程序生态2—区分小程序和H5微应用 钉钉小程序生态3—钉钉扫码登录PC端网站 钉钉小程序生态4—钉钉小程序三方企业应用事件与回调 钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知 钉…