选择排序: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;
}

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

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

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

猜你喜欢

转载自blog.csdn.net/adidas74891496/article/details/84950461