三种简单排序(C语言实现)

本文详细介绍了冒泡排序、插入排序与选择排序三种排序算法的实现方式、性能特点及应用场景,通过代码实现展示了每种算法的核心逻辑,并对它们之间的差异进行了深入分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单排序是指运行时间为O(n*n)的排序算法,将这三种排序整合到一起更有利于对比三者之间的区别,更有助于更深刻地理解各算法内的思路。

1冒泡排序

这种算法的思路和实现最简单粗暴,原因在于该算法基于一种数学原理,也可以说常识:按照单一增减性连续地交换元素,最终或者最后一个元素不是最大就是最小。但难点在于循环终点的计算,按照我的思维习惯,最初的思维落在内循环的结点上。只要确定内外循环终点之间的关系该算法即可实现。以下为C语言实现代码:

void bubblesort(int array[],int n){
	int i,j,m;
	int temp;
	for (i = 0; i < n-1; ++i)
	{
		for(j=0;j<n-i-1;j++)
			if(array[j]>array[j+1])
				swapdata(&array[j],&array[j+1]);
	}

}
2插入排序

该算法的技巧性更强。不过从效果上看,技巧性也带来了性能上的提升,该算法在二次时间界上应用最为广泛,并且在少量输入的情况下,运行速度并不亚于其他高级排序算法。如果n在10左右,建议使用该算法。

void insert_sort(int array[],unsigned int n){
	int i,j,m;
	int temp;
	for(i=1;i<n;i++){
		temp=array[i];
		for(j=i;j>0&&array[j-1]>temp;j--){
			array[j]=array[j-1];
			
		}
		array[j]=temp;
	}
}
3 选择排序

选择排序的思路是在待排数组内将最小的元素置于首位,然后在原数组除了首位元素外看作新的待排数组,直至到最后的元素即为完成排序。以下为代码实现:

void select_sort(int array[],int n){
	int i,j,m;
	int temp;
	for(i=0;i<n;i++){
		int index=i;
		for(j=i+1;j<n;j++)
			if(array[j]<array[index])
				index=j;
		if(index!=i){
			swapdata(&array[index],&array[i]);
		}
			
	}

	
}

总结:三种排序的外部循环的初始状态出插入循环外都是从0开始,当然这也是与内部循环的方向有关系,因为内部循环也只有插入排序 为递减;外循环的临界条件只有冒泡排序为n-1,原因在于后续比较是以前比后的方式,所以要预留出最后一个元素作为比较空间,同时也解释了插入排序的外循环的初始条件为什么从一开始,因为它采用的是以后比前的方式,要预留出第一个元素作为比较空间,冒泡排序比较特殊的是内循环的临界条件,是与外循环的初始状态呈递减的线性关系,即两者的和为定值。三种排序算法只有插入排序看起来没有使用交换元素的方式,其实在内循环的输出就是交换里的一步,只不过这一步是动态的,这也是插入排序较难理解的一个点所在。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值