选择排序:C语言实现

        选择排序是一种简单直观的排序算法,它与冒泡排序很相似,都是比较n - 1轮,每轮 n-1-i 次每轮找出一个最大/ 最小值。只不过冒泡放最后,选择排序放最左

        (本文以从小到大排序为例)

        与冒泡的比较:冒泡是将相邻的数逐个进行比较:(从小到大为例)只要前面的比后面的大,就互换倆数,直到最后将最大的数“浮到”最末尾,如此循环。

        而选择排序,先保存第一个元素的下标,之后所有元素与第一个比较,如果遇到最小的,则记录更小那个数的下标。直到最后将最小数的下标找出来,然后再此最小数放最左,即与下标0的元素互换位置。

        先判断最小的数下标是不是0,若不是则说明第一个元素不是最小的,则此数与下标0的元素互换位置,一轮下来,最小的数放最左边。找到第二小、第三小、第... ...。

        bb两小时,coding2分钟。。。

#include <stdio.h>
int main()
{
	int i,  j;
	int MinIndex;
	int buf;

	int a[] = {5,8,4,65,4,8,2,4,3,7,5,4,12,78,-7,0};
	int n = sizeof(a) / sizeof(a[0]);

	for(i=0; i<n-1; i++)	// n个数比较n-1轮
	{
		MinIndex = i;

		for(j=i+1; j<n; j++)	// 每轮比较 n-1-i次
		{
			if ( a[MinIndex] > a[j] )
			{
				MinIndex = j;	// 保存最小数字的下标
			}
		}

		if( MinIndex != i)	/*找到最小数后,若它的下标不是i,
						      则说明它不在最左,需要互换*/
		{
			buf = a[MinIndex];
			a[MinIndex] = a[i];
			a[i] = buf;
		}
	}

	printf("选择排序最终结果为:\n");
	for(i=0; i<n; i++)
	{
		printf("%d\x20",a[i]);
	}
	return 0;
}

        不同点:冒泡排序只要碰到前面比后面大,就交换;

        而选择排序一轮只交换一次,且若本轮最小的就是最左那个,就不用交换。

        所以该方法更符合人类思维

 

 更多排序方法:

冒泡排序

选择排序

插入排序

快速排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值