c语言实现【快速排序】:数据结构最后一章排序算法。全部使用c语言代码实现。包含算法定义,思想,文字版实现过程,动图演示等。

题目

本栏目是数据结构C语言版的十大排序算法,因为我只考常用的一些排序算法,所以会只更新一部分常用算法,每个排序分为算法思想,算法代码和执行结果三个部分展现。

更新第三篇:C语言实现快速排序


以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj。QQ:2394799692

一、算法思想

1.算法执行过程动图演示:

请添加图片描述

2.定义:

快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:

从数列中挑出一个元素,称为 “基准”(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

3.算法思想:

通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

4.我的总结:

快速排序就是先找出来一个数当基准(一般找第一个元素),然后根据基准将待排序列分为左子表(小于基准的)和右子表(大于基准的),然后如此反复,直到每部分内只有一个元素或为空时即完成了整个数组的排序。

其算法的表现主要取决于递归深度,划分越均匀,递归深度越低。划分越不均匀,递归深度越深。
稳定性为:不稳定
>时间复杂度为:
好的情况:O(n^2)
坏的情况:O(n log n)
>空间复杂度为:
好的情况:O(n)
坏的情况:O(log n)

5.学习笔记:

请添加图片描述

二、代码部分

1.引入库

代码如下(示例):

#include<stdio.h>

2.主函数部分

代码如下(示例):

int divide(int a[], int low, int high)
{
	int p = a[low];//以第一个元素作为基准
	while (low < high)//用lwo,high搜索基准的最终位置
	{
		while (low < high && a[high] >= p)
			high--;
		a[low] = a[high];//找出比基准小的数将其移动到基准左边
		while (low < high && a[low] <= p)
			low++;
		a[high] = a[low];//找出比基准小的数将其移动到基准右边
	}
	a[low] = p;//将基准存放到最终的中间位置
	return low;//返回存放基准的最终位置
}
void quicksort(int a[], int low,int high)
{
	if (low < high)//递归跳出的条件:low<high时说明整个数组已排序完成
	{
		int p = divide(a, low, high);//划分确定基准
		quicksort(a, low, p - 1);//划分左子表
		quicksort(a, p+1, high);//划分右子表
	}
}
void main()
{
	int a[] = { 1,2,3,4,9,8,7,6,5 };
	int n = sizeof(a) / sizeof(int);
	quicksort(a, 0,n-1);
	for (int i = 0; i < n; i++)
		printf("%d ", a[i]);
}

三、执行结果

在这里插入图片描述

输入:

a[] = { 1,2,3,4,9,8,7,6,5 };

输出:

1 2 3 4 5 6 7 8 9
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值