【C语言】快速排序

2023-11-08

一、算法描述

  • 一个基准,两个指针,一个前指针,一个后指针,前指针负责比基准小的数,后指针负责比基准大的数
  • 前指针向后移动的过程中如果遇到比基准大的数就停止移动,交换前后指针的值;后指针向前移动的过程中如果遇到比基准小的数就停止移动,交换前后指针的值
  • 直到前后指针相遇
  • 然后两边分别再进行一次快速排序

二、快速排序代码

void quick(int a[],int low,int high)
{
	int i,j,temp;
	if(low<high)
	{
		i = low;
		j = high;
		temp = a[low];//暂存基准点
		while(i<j)
		{
			while(i<j&&a[j]>temp)
				j--;//比基准点大,j前移
			if(i<j)
			{
				a[i] = a[j];//出现比基准点小的数
				i++;
			}
			while(i<j&&a[i]<temp)
				i++;//比基准点小,i后移
			if(i<j)
			{
				a[j] = a[i];//出现比基准点大的数
				j--;
			}
		}
		a[i] = temp;
		quick(a,0,i-1);//对i的左边快排
		quick(a,i+1,high);//对i的右边快排
	}
}

三、检测代码

#include<stdio.h>

void quick(int a[],int low,int high)
{
	int i,j,temp;
	if(low<high)
	{
		i = low;
		j = high;
		temp = a[low];//暂存基准点
		while(i<j)
		{
			while(i<j&&a[j]>temp)
				j--;//比基准点大,j前移
			if(i<j)
			{
				a[i] = a[j];//出现比基准点小的数
				i++;
			}
			while(i<j&&a[i]<temp)
				i++;//比基准点小,i后移
			if(i<j)
			{
				a[j] = a[i];//出现比基准点大的数
				j--;
			}
		}
		a[i] = temp;
		quick(a,0,i-1);//对i的左边快排
		quick(a,i+1,high);//对i的右边快排
	}
}

int main()
{
	int n,i;
	printf("请输入需要排序的数的个数:\n");
	scanf("%d",&n);
	int a[n];
	printf("请输入需要排序的数:\n");
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	quick(a,0,n-1);
	printf("快速排序的结果:\n");
	for(i=0;i<n;i++)
		printf("%d ",a[i]);
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言】快速排序 的相关文章

  • 利用Dom4j创建xml文档

    DocumentHelper是使用Dom4j的辅助类的集合 利用它我们可以创建xml文档 接下来我们就使用它来创建一个简单的xml文档 创建文档 第一种方式 Document document DocumentHelper createDo

随机推荐

  • 20200317_决策树预测贷款申请

    使用决策树 预测贷款申请 import pandas as pd 忽略弹出的warnings import warnings warnings filterwarnings ignore text pd read excel data Lo
  • 前导0 的数字

    代码和任务 copyright c 2015 csdn学院 All right reserved 文件名称 main c 作者 张如田 完成日期 版本号 任务描述 输入小时和分 以hh mm形式输出 其中小时和分钟不足两位数时 用零前导 例
  • 手动下载Python第三方库whl文件并进行安装

    手动下载Python第三方库whl文件并进行安装 在Python开发中 我们经常需要使用第三方库来辅助我们完成各种任务 而通常在安装这些库时 我们会使用pip命令进行安装 但有时候因为网络环境等原因 pip无法正常工作 导致我们无法安装所需
  • Ubuntu上交叉编译opencv及opencv_contrib并移植到ARM板之一

    完整人脸识别系统 源码 教程 环境 开源毕业设计 基于嵌入式ARM Linux的应用OpenCV和QT实现的人脸识别系统 源码 论文 完全毕设教程 Linux上Opencv与Qt实现的人脸识别的考勤点名 门禁系统 PC与嵌入式ARM版本 零
  • I2C通信基本原理及其实现

    I2C是一种总线式结构 它只需要SCL时钟信号线与SDA数据线 两根线就能将连接与总线上的设备实现数据通信 由于它的简便的构造设计 于是成为一种较为常用的通信方式 由于I2C采用的是主从式通信方式 所以 通信的过程完全由主设备仲裁 在通信之
  • 蓝桥杯2019年第十届省赛真题-扫地机器人

    题目 题目链接 题解 二分 贪心 二分模板 看到这道题第一时间想到的就是二分和动规 仔细一看二分有戏 能check出来 所以决定用二分好好想想 主要是因为我动规太菜了 怕了 二分时间 准确的说我们二分的不是时间 而是覆盖范围 也就是枚举每个
  • 《Python编程:从入门到实践》学习笔记——第11章 测试代码

    文章目录 前言 1 测试函数 1 1 单元测试和测试用例 1 2 可通过的测试 1 3 不能通过的测试 1 4 测试未通过时怎么办 1 5 添加新测试 2 测试类 2 1 各种断言方法 2 2 一个要测试的类 2 3 测试 Anonymou
  • 【机器学习】随机森林预测并可视化特征重要性

    今天需要用到特征重要性的分析 所以干脆就写一下使用随机森林是如何做建模并基于随机森林做特征重要性的分析 顺带给出了编码方式 随机森林 特征重要性可视化的完整Python代码 都是可以直接运行的 目 录 1 分类型特征编码 1 1 Label
  • cmd 命令行显示中文乱码

    cmd命令行显示中文乱码多数是由于字符编码不匹配导致 1 查看cmd编码方式 方法一 打开cmd 输入chcp命令回车 显示默认编码 活动代码页 936指GBK 方法二 打开cmd在标题栏单击鼠标右键选择 属性 在属性选项中可看到当前编码方
  • JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)

    原文 http blog csdn net sidihuo article details 44035015 第一个类 代码解读 java view plain copy package test1 opengl import java a
  • AirtestIDE学习笔记---安装(windows系统)

    这篇写的更详细点 https blog csdn net u013405658 article details 99443091 Airtest之前有听到过这样的工具 一直没有小试牛刀 直到上周参加了TesterHome社区组织的测试开发者
  • gTest 学习

    gTest 目录 在Clion上安装 断言 判断bool 数值判断 字符串判断 显示返回成功或失败 异常检查 输出更详细信息 自定义输出 浮点数相等 相近判断 事件 全局事件 TestSuite事件 TestCase事件 参数化 在Clio
  • 【mcuclub】STC89C52单片机最小系统讲解

    1 实物图 2 原理图 3 介绍 3 1 主芯片 STC89C52是STC公司生产的一种低功耗 高性能8位微控制器 器件参数 1 增强型8051单片机 指令代码完全兼容传统8051 2 工作电压 5 5V 3 3V 3 工作频率范围 0 4
  • 从零开始的管理系统(自用)之三:.NET6后端框架搭建和私人Nuget服务搭建

    因为既然采用前后端分离的方式 就不想把所有功能都写在一个项目里面 对电脑性能的debug都是一种负担 于是采用微服务思想 将后端API按照业务拆分 因为肯定不能的服务会用到相同的代码块 因此搭建私人Nuget包用来封装相同的代码块 1 vs
  • 【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]

    1 错误信息分析 error passing const xxx as this argument discards qualifiers fpermissive 直译 错误 将 const xxx 作为 this 参数传递会丢弃限定词 d
  • 绿色开源的屏幕/截屏OCR软件Capture2Text

    近日发现一个比较好的绿色开源的屏幕 截屏OCR软件 Capture2Text 官网说明 http capture2text sourceforge net 项目地址 https sourceforge net projects captur
  • 仿射密码实验 C语言

    文件操作 FILE fp fp fopen r 打开文件 while fgets msg 50 fp1 NULL 读取文件中的数据 50 1 长度 到 msg数组 fprintf fp d num 向文件格式输入 最后记得关闭文件 函数 求
  • 使用Maven+Intellij快速创建一个SpringBoot项目——helloworld

    文章目录 一 从 http start spring io 生成maven项目 二 导入maven项目 三 maven项目目录结构 四 创建controller 五 运行项目 springboot内置了tomcat服务器 这样在web项目中
  • JSONObject 比 Map好使的地方

    需求 改originalJson中的json字符串的key 当key满足在configMapping中配置的key2情况的时候 把originalJson的key改成 configMapping中的value2 上代码 import cn
  • 【C语言】快速排序

    一 算法描述 一个基准 两个指针 一个前指针 一个后指针 前指针负责比基准小的数 后指针负责比基准大的数 前指针向后移动的过程中如果遇到比基准大的数就停止移动 交换前后指针的值 后指针向前移动的过程中如果遇到比基准小的数就停止移动 交换前后