排序算法汇总——C语言版

一、选择排序法

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾,重复操作。

在这里插入图片描述算法分析:
第一轮比较是数组中的第一个元素与其他的元素一 一对比,只要找到比它小的,它两就交换顺序,所以第一个相对于已经进行比较过的元素而言是最小的,继续比较下去,当它和所有的元素都比较完之后,它就是所有元素中最小的有一个了。
第二轮比较就只需要从第二个元素开始了,依此类推,就把所有元素从小到大排列完成了。(从大到小排序同理)
代码实现:

void selectsort(int *array,int n)
{
	for(int i=0;i<n-1;i++)//控制比较的轮数
	{
		for(int j=i+1;j<n;j++)
		{
			if(array[i]>array[j])
			swap(array,i,j);//交换arry[i]与array[j]的顺序
		}
	}
}

二、冒泡排序

这个算法的名字由来是因为越小(大)的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。与“选择排序”的区别在于选择排序中的比较是一个确定的元素与剩下的一一比较,而冒泡排序始终都是两个相邻的元素在比较,而且它将最大(小)元素放到数列的最后
在这里插入图片描述算法分析:
(从小到大排列)第一个元素与第二个元素相比,如果第一个大于第二个,那么交换它们的顺序,此时第二个与第三个比较,如果大于第三个,那么同样交换位置,此时第三个元素相对于前两个元素而言是最大的,只要继续和剩余的比较下去,那么比较完成之后,最后一个元素就是最大的一个。接下来就继续开始新一轮的比较。
代码实现:

void Bubblesort(int *array,int n)
{
  for(int i=1;i<n;i++)//控制比较的轮数,一共需要比较n-1轮,这里的的i与数组的下标无关
   {
	  for(int j=0;j<n-i)//n-i是因为每一轮比较都会把一个最大的数排到最后
		{
			if(array[j]>array[j+1])
				swap(array,j,j+1)
		}

   }

}

后续内容持续更新中。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值