冒泡排序,插入排序,快速排序,堆排序,希尔排序,归并排序,计数排序,选择排序


🎉前言

本人是西安邮电大学一名普通的大二学生,希望这篇关于插入排序的博客对你有用

点个赞嘛

请添加图片描述

以下动图均来自https://www.r2coding.com/#/


🚕交换数据函数(SwapData)

这个函数会经常用到

void SwapData(int* pa, int* pb)
{
   
	int tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}

🦽 寻找中间值做key的函数(GetMidi)

这个再快排那里会用到

int GetMidi(int* a,int left, int right)//寻找中间值做key
{
   
	int midi = left + ((right - left) >> 2);
	if (a[left] < a[midi])
	{
   
		if (a[midi] < a[right])
		{
   
			return midi;
		}
		else if (a[left]>a[right])
		{
   
			return left;
		}
		else 
		{
   
			return right;
		}
	}
	else
	{
   
		if (a[midi] > a[right])
		{
   
			return midi;
		}
		else if (a[left] < a[right])
		{
   
			return left;
		}
		else
		{
   
			return right;
		}
	}
}

🚒 堆排序

点击这里看->堆的定义以及堆排序


🎈冒泡排序

冒泡排序动图解释:

在这里插入图片描述
冒泡就是每次把最大或者最小的挪到最边
这个代码不难理解,相信大家初学C语言就了解到了冒泡排序

// 冒泡排序
void BubbleSort(int* a, int n)
{
   
	int i = 0;
	int j = 0;
	for (i = 0; i < n; i++)
	{
   
		int exchange = 0;//加一个判断条件,比如:如果第x趟是有序的直接结束掉循环,return掉
		for (j = 0; j < n - i - 1; j++)
		{
   
			if (a[j] > a[j + 1])
			{
   
				SwapData(&a[j], &a[j + 1]);
				exchange = 1;//有交换的话置为1
			}
		}
		if (!exchange)//没有交换就返回
		{
   
			return;
		}
	}
}

🏍️插入排序

什么是插入排序

个人理解插入排序类似于打牌

幸运女神在微笑,胜利女神在微笑

在这里插入图片描述


在这里插入图片描述

🎉插入排序代码实现

void InsertSort(int* a, int n)//想象自己在打扑克
{
   
	int i = 0;
	for (i = 0; i < n - 1; i++)//先是第一个和第二个开始比较
	{
   
		int end = i;//end是下标
		int tmp = a[end + 1];
		while (end >= 0 && tmp < a[end])
		{
   
			a[end + 1] = a[end];
			end--;
		}
		a[end + 1] = tmp;//用3 1 2 作为测试用例就可以理解为什么是a[end+1]=tmp
	}
}

🚙希尔排序

希尔排序和插入排序差不了多少,只是每次比较的间距从1变成了一个变量,这个变量 gap根据数据的数量而定,不过最后gap还是要等于1

动图演示:

在这里插入图片描述

// 希尔排序
void ShellSort(int* a, int n)
{
   
	int gap = n;//n=2的时候代入一下
	while (gap > 1)//gap=1的时候已经执行一次代码了,然后再判断的。
	{
   
		gap = gap / 3 + 1;
		int i = 0;
		<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值