选择排序法
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++) 循环这么多次
时间: 2024-10-10 20:25:23