快速排序算法相关思路与C语言代码

很久没有更新csdn上的内容了,从上学期开始期末备考之后,到目前寒假已经过了大半,csdn相对于我来说,像是一种自己的学习笔记,虽然到现在很长时间没有接触到新的知识,但是每天也在做着日常的练习题,今天拿出做题中经常用到的快速排序算法来分享一下

什么是快速排序算法

"快速排序"顾名思义,就是计算速度非常快的一种针对排序的算法,是七大排序算法中时间复杂度最小,排序最快的一种算法.

它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快速排序的基本原理及其流程

首先给定一个未排序数组(这里以未排序数组进行示范)
在这里插入图片描述
这是一个大小为6的一个未排序整数数组
先选中一个任意基准值,这里以最左边的数5为基准值,然后从右往左遍历,找到第一个小于基准值的数字,然后进行交换.
在这里插入图片描述
交换完成之后,再以基准值从左往右进行比较,找到第一个大于基准值的数进行交换
,交换完成后,再次以基准值从右往左进行比较,并与第一个小于基准值的数进行交换,不断重复上述步骤,直到基准值左边得数 都小于基准值,右边的数都大于基准值,
在这里插入图片描述
之后将基准值左边的数与右边的数分成两个数组,分别重复以上步骤,最后即可得到一个已排序数组
在这里插入图片描述
如此,便得到一个已排序数组,0,3,4,5,6,9

快速排序代码(C语言)

void QuickSort(int* a, int left, int rit) {

	if (left > rit)
		return;
	int tmp;//交换数据中间变量
	int i = left, j = rit;
	while ( i < j) {
		while (i<j && a[i] <= a[j]) {
			j--;
		}//从右往左,找到第一个小于基准值的数
		tmp = a[i];
		a[i] = a[j];
		a[j] = tmp;

		while (i < j && a[i] <= a[j]) {
			i++;
		}//从左往右,找到第一个大于基准值的数
		tmp = a[i];
		a[i] = a[j];
		a[j] = tmp;
	}//以a[i]为基准值进行排序
	QuickSort(a, left, i - 1);
	QuickSort(a, i + 1, rit);
//运用递归进行带入
}//快速排序
int main() {
	int a[10];
	printf("请输入待排序的十个数\n");
	for (int i = 0; i < 10; i++) {
		scanf("%d", &a[i]);
	}//初始化未排序数组
	QuickSort(a, 0, 9);//将未排序数组带入函数
	for (int j = 0; j < 10; j++) {
		printf("%d\n", a[j]);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值