单循环完成快速排序(C语言)

news/2025/1/15 22:06:46/

注:这个代码是一位强者教我的,我以一个初学者的思维加了点注来帮助更多像我一样刚刚入门想学习算法又不会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;
}


http://www.ppmy.cn/news/872973.html

相关文章

6.1 双循环与单循环求1到10的阶乘

双循环: 1 #include<stdio.h>2 int main()3 {4 int jiech,i,j;5 long int S=0;6 for(i=1;i<=10;i++)7

判断带头结点的单循环链表为空表的条件

判断带头结点的单循环链表为空表的条件 判断空表的条件是L->next是否等于L&#xff1b; 在循环中判断当前结点是否是尾结点的条件是p->next是否等于L&#xff01;即当前结点的指针域是否指向头结点。

数据结构-线性表-单循环链表(使用尾指针)(c++)

目录 单循环链表说明注意 &#xff08;一&#xff09;无参构造函数&#xff08;二&#xff09;有参构造函数&#xff08;三&#xff09;析构函数&#xff08;四&#xff09;获取长度&#xff08;五&#xff09;打印数组&#xff08;六&#xff09;获取第i个元素的地址&#xff…

链表(单/双/单循环/双循环)

文中链接附上java版代码 1.单链表 单链表是一种链式存储的数据结构&#xff0c;方便插入/删除数据元素&#xff0c;对比数组&#xff0c;在进行插入删除等操作时&#xff0c;更节省空间。单链表中每一个结点的构成都是由数据元素指针构成的 2.单循环链表 单循环链表与单链表…

单循环链表实现(设立尾指针)(第二章 P35)

设立尾指针的单循环链表 单链的循环链表结点的存储结构和单链表的存储结构一样&#xff0c;所不同的是&#xff1a;最后一个结点的 next 域指向头结点&#xff0c;而不是“空”。这样&#xff0c;由表尾很容易找到表头。 但若链表较长&#xff0c;则由表头找到表尾较费时&#…

快速排序的实现(单边循环、双边循环、非递归的实现)

文章目录 前言双边循环法思路梳理代码展示总结 单边循环法思路梳理代码展示 非递归的实现思路梳理代码展示 总结 前言 上一篇文章讲解了冒泡排序的优化&#xff0c;现在来总结一下快速排序。快速排序作为经典的排序算法之一&#xff0c;其实也用到了冒泡排序的思想&#xff0c…

单循环赛积分至少多少才能保证一定出线?

4支球队在同一小组进行单循环足球比赛&#xff0c;争夺出线权。比赛规则规定&#xff1a;胜一场得3分&#xff0c;平一场得1分&#xff0c;负一场不得分。小组中积分最高的两个队&#xff08;有且只有两个队&#xff09;出线。小组赛结束后&#xff0c;如果A队没有全胜&#xf…

数据结构—带头结点的单循环链表

1.基本操作 循环链表的特点是最后一个元素的指针域指向头结点。 因此对于循环链表的初始化&#xff08;设表的头结点是L&#xff0c; 不再是L->nextNULL&#xff0c;而是L->nextL。循环链表为空时&#xff0c;头结点的下一个结点依然是头结点本身。因此但虚幻链表的初始…