上午回答人家的,现在贴过来(楼上说的都是对的,你结合着理解看看):
找排序的区别,一定要动手(用笔,不是电脑)去执行代码,不用问你也可以看出代码怎么排的,而且你自己对这问题的理解也更加深刻,问人的话说不定哪天你又忘了,说不定还把两种给搞反了。我下面手写给你解释一下代码,你动手去画一下。
为了方便思考,数组零位置我没用
选择排序(从小到大,每次将a[i]到a[n]中最小的值找到,并放到a[i]处)
for(i=1;i<=n;i++) //a[i[是我们当前要确定的数,这样的数有n个(即数组长度)
{
k=i; //k用来待会记录较小的数的位置
for(j=i+1;j<=n;j++) //将a[i]依次与后面的数比较,最后把最小的数交换到a[i]
{
if(a[j]<a[k])
k=j;
}
temp=a[k]; //k存的就是最终最小的数的位置,把最小的数交换到a[i]
a[k]=a[i];
a[i]=temp;
}
冒泡排序(顺着两两比较,最终最大的数被比较的最后位置,最终达到从小到大顺序)
for(i=1;i<n;i++) //这里n为比较次数,n个数,比较n-1次,最后一个数自然是最小的
for(j=1;j<=n-i+1;j++) //每次比较,后面比较好的数就不用再比较了
//n-i+1怎么来的?当i=1时,第一次比较肯定包括a[n],用这个特殊情况来写。
{
if(a[j]>a[j+1])
{
temp=a[j]; //把相邻两个数据比较出的较大的值换到后面
a[j]=a[j+1];
a[j+1]=a[j]
}
}
代码为手写,可能有错误,但大致思想就是这样,希望能帮到你。
温馨提示:答案为网友推荐,仅供参考