计算机考研时几种常见内部排序算法总结(C语言篇)

计算机考研时几种常见内部排序算法总结(C语言篇)

本文是根据 数据结构(C语言版 严蔚敏)课本上第十章出现的内部排序算法,进行总结,自我分析,适合考研的兄弟姐妹们食用(我也是个考研狗),如有错误,欢迎留言指出,多谢支持!

一.首先我们来看看这些常见的内部排序算法的比较

排序算法 最好时间复杂度 平均时间复杂度 最差时间复杂度 空间复杂度 数据对象稳定性
冒泡排序(Bubble Sort)(掌握) O(n) O(n²) O(n²) O(1) 稳定
选择排序(Selection sort)(掌握) O(n²) O(n²) O(n²) O(1) 数组不稳定、链表稳定
插入排序(Insertion Sort)(掌握) O(n) O(n²) O(n²) O(1) 稳定
快速排序(Quick Sort)(掌握) O(n*log₂n) O(n*log₂n) O(n²) O(log₂n) 不稳定
堆排序(Heap Sort)(掌握) O(n*log₂n) O(n*log₂n) O(n*log₂n) O(1) 不稳定
归并排序(Merge Sort)(掌握) O(n*log₂n) O(n*log₂n) O(n*log₂n) O(n) 稳定
希尔排序(Shell Sort)(掌握) O(n) O(n*log₂n) O(n²) O(1) 不稳定
基数排序(Radix Sort)(理解) O(d(n+rd)) O(d(n+rd)) O(d(n+rd)) O(rd) 稳定

其他的数列排序还有:桶排序、计数排序、块排序、平滑排序…等,这些不在考研课本的范围内,之后有机会会慢慢补充。

注:以下代码都会用到随机数来生成随机数组

#include<time.h>//需要的头文件

srand((unsigned int)time);//生成随机数代码
int arr[10];//十个数组
for (int i = 0; i < 10; i++)
{
   
	arr[i] = rand() % 100;//生成随机数范围0-100
	printf("%d ",arr[i]);//打印这十个数
}

还有打印指令

for (int i = 0; i < 10; i++)
	{
   
		printf("%d ", arr[i]);
	}

二.分类讨论与代码展示

1.冒泡排序(Bubble Sort)

冒泡排序(又可以叫起泡排序)算是排序算法里的基础,属于稳定的排序算法 ,冒泡的本质是交换两个数进行比较 然后交换,多次循环,完成排序。想必大家都接触过,这里,我用一个公式简单表明

for (int i = 0; i < len - 1; i++)//len代表数组长度,(可替换)(i代表的是数组下标)
	{
   
		for (int j = 0; j < len - 1 - i; j++)
		{
   
			if (arr[j]>arr[j + 1])//两个数大小比较
			{
   
				int temp = arr[j];//赋值
				arr[j] = arr[j + 1];//交换
				arr[j + 1] = temp;
			}
		}
	}
2.选择排序(Selection sort)

选择排序是一个不稳定的排序,选择排序的基本就是在于先搜索找到最小(大)的一个值,进行左移到第一位,然后重复这个动作直到所有的都排序完成

for (int i = 0; i < len-1; i++)//len代表数组长度,(可替换)(i代表的是数组下标)
	{
   
		int min = i;//假设i号位是一个最小值
		for (int j = i+1; j < len; j++)继续搜索
		{
   
			if (arr[j] < arr[min])//进行搜索如果新找到数j比i小
			{
   
				min = j;
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值