黑马程序员技术交流社区

标题: 冒泡排序与选择排序的区别 [打印本页]

作者: fangbuqianxing    时间: 2016-3-29 20:00
标题: 冒泡排序与选择排序的区别
冒泡排序是将相邻的两个数进行比较,将大数调换到后面,调换完成之后再一次与后边相邻的数进行比较再调换,最后把最大的数调换到最后的位置。在进行第二轮比较,比较前n-1个数,再把最大的数调换到最后,一次类推,直到循环到第一个数。比较完成之后从小到大排序。

选择排序是设定一个变量k存放最大值的下标,假设第一个数是最大值,与后边相邻的数一次进行比较,假如后边的数大于前边的数,则把大数的下标值赋值给k,当一轮比较完成之后,最大数是带k下标的数组元素,看最大值是否是第一个数,如果不是,把第一个数与最大数进行交换,第一个数变为最大数,紧接着进行第二轮比较,比较余下的数,以此类推比较完成之后,数值从大到小排列。

两者不同之处在于冒泡排序两两比较如果前边大于后边则马上调换,是一个大数往后调换的过程,选择排序只是记录最大值的下标,一轮比较完之后,如果最大值不是第一个值才进行调换位置,是一个大数往前调换的过程。

作者: Zhangqi27    时间: 2016-3-31 00:35
没有代码啊                     
作者: Sniper-L    时间: 2016-3-31 00:44
学到了                                 
作者: z276698840    时间: 2016-3-31 12:56
没代码结合难理解
作者: 风小筝    时间: 2016-4-1 09:27
加油加油加油
作者: 堕落天使    时间: 2016-4-1 12:19
如果加上一点代码,效果会更好的!加油!
作者: x_starry    时间: 2016-4-5 21:50
学习了!
作者: UKnowINeedYou    时间: 2016-4-7 16:19
冒泡排序:       
int bubble(int a[],int n)
{
        int i,j,temp;
        for(i=0;i<n-1;i++)
                for(j=i+1;j<n;j++)
                        if(a[i]>a[j]){

                                temp = a[i];
                                a[i] = a[j];
                                a[j] = temp;
                        }
}



选择排序:
int chooseSort(int a[],int n)
{
        int i,j,temp,k;
        for(i=1;i<n;i++){

                k = i;//k存放当前循环的层数

                for(j=i+1;j<n;j++)
                        if(a[j]<a[k]){
                                k = j;        //交换标号
                                temp = a[k];
                                a[k] = a[i];
                                a[i] = temp;       
                               
                        }
        }

}
作者: hy415161    时间: 2016-4-7 18:41
嗯嗯!谢谢总结!!!
作者: 毛小猪    时间: 2016-4-7 22:19
不错不错
作者: zhaoshuai    时间: 2016-4-7 22:26
没什么两样
作者: 烛风小糊涂    时间: 2016-4-8 15:55
代码写起来都差不多,有点小区别,但是思路确是完全不同。
我很佩服能够想出这种排序的人,在计算机和人脑中取得了很好的平衡!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2