单循环完成快速排序(C语言)
注:这个代码是一位强者教我的,我以一个初学者的思维加了点注来帮助更多像我一样刚刚入门想学习算法又不会C++的编程者们理一理思路(我是屑大学生,加的注可能会有逻辑不严谨的地方),希望对你们有些帮助
下面以一个内含1~10十个数字的简单数组来展示单循环完成的快速排序
#include<stdio.h>
void quicksort(int a[], int left, int right) //这个加不加void都行,加了更严谨
{int p;if (left < right) {p = left;int index = p + 1;/*单循环完成分区,用index“锁住”在左区第一个出现的比基准值大的值,并把它当做“搬运工”,以交换的形式把该点右边所有比基准值小的数放到左边,最后把基准值的位置放在搬运完成后第一个比基准值大的值后面,就完成了一次分区*/for (int i = index; i <= right; i++)if (a[i] < a[p]) {int t = a[i];a[i] = a[index];a[index] = t;index++;/*每有一个比基准值小的数,基准值要确定的位置就往前走一步,当有比基准值大的数出现时,让i去找该数后面比基准值小的数,然后交换a[index]内存的数和a[i]内存的数。注意,只是交换数,index实际上表示的是位置,他只是一个基准值的备用参考容器,每出现一个比基准值大的值,index就会被拖慢一步,这样最终index和i的差值就是比基准值大的值的个数,也即右区的长度,以此来完成分区*/}int t = a[p];//把基准值放到它该到的位置上a[p] = a[index - 1];a[index - 1] = t;p = index - 1;quicksort(a, left, p - 1);//先分左边quicksort(a, p + 1, right);//再分右边/*注意,对于部分“找第几”的问题,以那个“第几”为left或right,然后只排一边即可*/}
}
int main()
{int a[10] = { 6, 1, 2, 4, 9, 3,7, 10, 8, 5 };//目标数组quicksort(a, 0, 9);for (int i = 0; i < 10; i++) printf("%d ", a[i]);return 0;
}
单循环完成快速排序(C语言)相关推荐
- 快速排序c语言实现,快速排序的C语言代码实现
快速排序实质上是对"冒泡排序"的一种改进,整个排序过程可概括为:通过N趟的排序将原本的排序数据分为若干块进行分块排序,而在每趟排序过程中,以指定的关键字将待排数据分别分为比关键字大 ...
- c++ 快速排序_C语言必学的12个排序算法:归并排序(第8篇)
题外话很多童鞋感受算法比较难度,的确,算法其实和C语言本身关系不大,算法是计算机科学家利用丰富的数学和算法设计知识研究出来,如今我们只需拿来主义,学习使用即可,当然这需要一定的努力过程. [C语言必学 ...
- c语言对随机数进行快速排序,C语言快速排序与二分查找算法示例
本文实例讲述了C语言二分排序与查找算法.分享给大家供大家参考,具体如下: 题目:首先产生随机数,再进行快速排序,再进行二分查找. 实现代码: #include #include #include vo ...
- 冒泡排序 选择排序 快速排序(C语言)
#include <stdio.h> #include <stdlib.h> #include <time.h> //用到了time函数#define arrayS ...
- 基于链表的快速排序C语言,双向链表的快速排序算法,编译通过,程序会崩溃,求助一下各位...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 要求就是在双向链表上实现快速排序:(.cpp文件) #include #include #define TRUE 1 #define FALSE 0 #d ...
- 单循环链表(C语言实现)
//CList.h //结构体定义以及函数声明 #ifndef CLIST_H #define CLIST_H#include <stdio.h> #include <assert. ...
- c语言程序设计现代方法快速排序,C语言实现快速排序改进版
利用三者取中法改进快速排序,具体内容如下 实现取数组中第一个,中间和最后一个元素的中间元素作为划分元素(否则将这些元素排除在划分过程之外).大小为11或更小的数组在划分过程中被忽略,然后使用插入排序来 ...
- 快速排序c语言单链表代码,快速排序算法及源代码(C语言)
快速排序是对冒泡排序的一种改进.它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排 ...
- c语言对随机数进行快速排序,C语言自带快速排序对比插入排序
#include #include #include void getRandomArr (int arr[], int n); void printArr (int arr[], int n); v ...
- 学生成绩管理系统c语言堆排序快速排序,c语言 快速排序---归并排序----堆排序...
//快速排序: #include #define MAX 500000 int s[MAX]; void Q_Sort(int start,int end) { int i,j,t; if ( sta ...
最新文章
- java 循环时间调用 程序(转)
- 想请教知者几个地图问题
- 《使命召唤7:黑色行动》有什么简单办法进入僵尸模式
- Python中的*self,*self._args, **kwargs
- 多种方法去除按钮以及链接点击时虚线
- 模拟计算机用英语怎么说,电脑里的 属性 英语怎么说
- 迈高图手机版_迈高图地图下载
- HDFS的命令行操作
- OpenCV:图像检索
- 手把手学会gitbub(4)
- 把人脑“森林”上传到计算机:人类脑计划只是一个科幻野心?
- 学校计算机硬件管理制度,学校规章制度之计算机硬件管理制度
- 杀毒软件 McAfee 创始人自杀,75 年传奇人生画下句号
- 为什么选择ROS2编程作为机器人工程课程之一?
- 〖Python 数据库开发实战 - Python与MySQL交互篇⑯〗- 项目实战 - 实现用户管理 - 新增用户功能
- 【blue bridge cup】笔记
- c++中bitset的用法总结
- Python urllib.urlencode
- 360lib投影格式介绍(二) - 立方体贴图投影(CMP / ACP / EAC / SSP / TSP)
- 计算机专业考研出国留学条件,申请美国计算机专业研究生条件都有哪些?