【C语言经典实例】-选择排序

本实例实现的功能是:用选择排序法对从键盘输入的10个数由小到大进行排序。

程序中用到了两个for循环语句,第一个for循环是确定位置的,即第几个位置,放置哪个数,就是确定a[i]的值,比如当i=0时,就是确定a[0].

第二个for循环的作用是实现a[i]与后面待排序区间中的数进行比较。

#include 
#include 

void main()
{
	int i,j,t,a[11];			//定义变量及数组为基本整型
	printf("请输入10个数:\n");
	for(i=1;i<11;i++)
	{
		scanf("%d",&a[i]);		//从键盘中输入要排序的10个数字
	}

	for(i=1;i<=9;i++)
	{
		for(j=i+1;j<=10;j++)
		{
			if(a[i]>a[j])		//如果第i个数比第j个数大,则利用中间变量t实现两值互换
			{
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
	}
	printf("排序后的顺序是:\n");
	for(i=1;i<=10;i++)
	{
		printf("%5d",a[i]);		//输出排序后的数组
	}
	printf("\n");
	system("pause");
}	

排序选择的基本算法是,从待排序的区间中经过选择和交换后选出最小的数值存放到a[0]中,再从剩余的未排序区间中经过选择和交换后选出最小的数值存放到a[1]中,a[1]中的数字仅大于a[0],依次类推,即可实现排序。

选择排序与冒泡排序的异同:

相同点是,两个算法都有两次for循环,都是通过比较,利用中间量交换数值。

不同点是,在选择排序中,第一层for循环是确定在哪个位置插入哪个数,i=0时确定a[0],并且a[0]是所有数中最小的,当i=1时,确定a[1],a[1]仅仅大于a[0],而小于其他的数

在冒泡排序中,第一层for循环是比较的趟数,如有n个数,第一趟,则进行n-1次两两比较;第j趟,进行n-j次两两比较

在第二层for循环中,两两比较的方式也有所不同,选择排序是固定a[i],a[i]的位置不变,来和待排序的a[j]做对比。而冒泡排序中,则是a[j]与a[j+1]做比较,它们是两两相邻的,而选择排序中两两比较的数并不都相邻。


你可能感兴趣的:(C语言)