码迷,mamicode.com
首页 > 编程语言 > 详细

选择排序法、冒泡排序法

时间:2015-08-27 11:24:37      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

选择排序法

int main(int argc, char *argv[])
{
	int i, j, iMin;
	int tmp;
	int nNums[10] = {2,123,541,32,12,74,92,50,8,21};

	for(i=0;i<10-1;i++)
	{
		iMin = i;    //提取数据的每个位置
		for(j=i+1;j<10;j++)  //每次循环,通过iMin获取最小值的下标。
		{
			if(nNums[iMin]>nNums[j])   //判断是否最小,比imin。后面的数就同imin这个数进行比较
				iMin = j;
		}
		if(iMin != i)   //当iMin不等i的时候,我们交换值。等于i我们就没有必要交换
		{
			tmp = nNums[i];
			nNums[i] = nNums[iMin];
			nNums[iMin] = tmp;
		}
	}

	return 0;
}

通过以下图来分析

技术分享

这里外层循环中,每次循环都取得一个排序的位置。

然后内层循环比较判断出数组的最小数。在把最小数填充到外层的排序位置中

————————————————————————————————————

冒泡排序法

int main(int argc, char *argv[])
{
	int i, j;
	int tmp;
	int nNums[10] = {2,123,541,32,12,74,92,50,8,21};

	for(i=0;i<10-1;i++)  //控制循环次数
	{
		for(j=0;j<10-i-1;j++)//内层循环,相应的两两数进行比较
		{
			if(nNums[j]>nNums[j+1])//比较交换数据
			{
				tmp = nNums[i];
				nNums[i] = nNums[iMin];
				nNums[iMin] = tmp;
			}
		}
	}

	for(i=0;i<10;i++)
		printf("%d ",nNums[i]);
	system("pause");
	return 0;
}

原理如下图:

技术分享

其中内层循环中,每次循环都把1个给比较到最后。那我们在内层循环的时候就可以少循环i次

所以内层循环 for(j=0;j<10-i-1;j++)  循环这么多次

选择排序法、冒泡排序法

标签:

原文地址:http://my.oschina.net/u/2421636/blog/497730

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!