冒泡排序和选择排序有什么区别,具体一些谢谢啦
3个回答
展开全部
找排序的区别,一定要动手(用笔,不是电脑)去执行代码,不用问你也可以看出代码怎么排的,而且你自己对这问题的理解也更加深刻,问人的话说不定哪天你又忘了,说不定还把两种给搞反了。我下面手写给你解释一下代码,你动手去画一下。
为了方便思考,数组零位置我没用
选择排序(从小到大,每次将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]
}
}
代码为手写,可能有错误,但大致思想就是这样,希望能帮到你。
为了方便思考,数组零位置我没用
选择排序(从小到大,每次将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]
}
}
代码为手写,可能有错误,但大致思想就是这样,希望能帮到你。
展开全部
冒泡排序采取从左到右相邻两个比较交换,可以计算出逆序数。
选择排序则是改值依次与后面的进行比较交换。
选择排序则是改值依次与后面的进行比较交换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
找排序的区别,一定要动手(用笔,不是电脑)去执行代码,不用问你也可以看出代码怎么排的,而且你自己对这问题的理解也更加深刻,问人的话说不定哪天你又忘了,说不定还把两种给搞反了。我下面手写给你解释一下代码,你动手去画一下。
为了方便思考,数组零位置我没用
选择排序(从小到大,每次将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]
}
}
代码为手写,可能有错误,但大致思想就是这样,希望能帮到你。
为了方便思考,数组零位置我没用
选择排序(从小到大,每次将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]
}
}
代码为手写,可能有错误,但大致思想就是这样,希望能帮到你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询