标签:
选择排序法
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