黑马程序员技术交流社区

标题: 冒泡排序和选择排序最根本的不同是什么 [打印本页]

作者: autumnforest    时间: 2015-11-12 00:49
标题: 冒泡排序和选择排序最根本的不同是什么
有什么区别啊……
作者: hbcoding    时间: 2015-11-12 08:15
冒泡排序每次比较的是两个相邻的数,一次比较的结果是最大数出现在最后,就像气泡一样上浮,所以称之为冒泡排序;选择排序是取第一个数,将它与剩下数的最小值交换。两者排序一次进行数据交换的次数不同,而且选择排序是不稳定的。
作者: li3N    时间: 2015-11-12 09:54
hbcoding 发表于 2015-11-12 08:15
冒泡排序每次比较的是两个相邻的数,一次比较的结果是最大数出现在最后,就像气泡一样上浮,所以称之为冒泡 ...

为什么说选择排序不稳定?这个真不懂,求教
作者: hbcoding    时间: 2015-11-12 11:04
li3N 发表于 2015-11-12 09:54
为什么说选择排序不稳定?这个真不懂,求教

稳定的意思就是排序中关键字相同的几项,在排序后的顺序不变,比如序列9,7,9*,6。第一项和第三项的关键字相同,在进行选择排序时,第一次排序9和6交换位置。最终的结果为6,7,9*,9。9排在了9*的后面,所以选择排序为不稳定的排序算法。
作者: 253186803    时间: 2015-11-12 12:17
冒泡是每次相邻的做比较,选择是一次性和所以对象做比较
作者: 小huahua    时间: 2015-12-5 14:05
冒泡排序是相邻的两个元素比较,选择排序是一个和其他所有元素比较
作者: 汐枫wait    时间: 2015-12-6 20:41
选择排序是拿头角标位和其它的角标位一个一个比,冒泡排序是两个相邻的角标位比,就这个区别。
作者: absvir    时间: 2016-8-31 22:42
冒泡比较与交换的是相邻的两项,即i项和i+1项,选择比较的第i项和其后所有的项(为了方便表述设该项为n),交换的也是i项和n项.总体来说,同样的数据两者比较次数相同,但选择排序的交换次数更少,两种算法,平均效率(算法上专业名词为时间复杂度)相同,但直观感觉交换次数少的选择排序更快,实际上,真的是一样的.比如完全逆序的整数,选择和冒泡的比较次数和交换次数没有差别,打字分析太累,你可以自己按代码分析一下
作者: gcno93    时间: 2016-8-31 22:51
冒泡  相邻  选择全比
作者: 小超超    时间: 2016-8-31 22:56
学习了学习了
作者: 毕加索    时间: 2016-9-16 21:30
只是元素值的索引选择不同
作者: 奋斗41280    时间: 2016-9-16 21:33
快速排序效率最快
作者: IceLoveInFire丶    时间: 2016-9-27 21:18
我看来 两者的区别最多也就是原理上的不同,实现方法还是一样的,都是通过循环嵌套加上比较。
作者: 18001105207    时间: 2016-9-27 21:36
根本就是思想不同喽
作者: 赢无翳    时间: 2016-9-27 23:37
楼上这么多删除此贴是啥意思啊?
作者: wolfking0608    时间: 2016-9-28 15:14
冒泡排序是相邻的两个元素比较,选择排序是一个和其他所有元素比较
作者: Fate_stay    时间: 2016-9-29 22:38
冒泡排序每次比较的是两个相邻的数,第一次比较后结果是最大数出现在最后,. 选择排序是取第一个数,将它与剩下数的最小值交换
作者: 小泥人    时间: 2016-9-30 13:49
个人感觉是比较的次数不同,数据多的时候,效率就显示出来了,数据少应该感觉不出什么
作者: 廖灵建    时间: 2016-9-30 18:45
比较的顺序是不同的  
作者: bahamut322    时间: 2016-9-30 22:43
没有选择语句控制跳出循环的情况下,两种排序的循环次数都是固定的,我感觉算一下就知道了
作者: markiyangliu    时间: 2016-10-1 15:28
他们的运算过程不一样吧!!  
作者: 15835811325    时间: 2016-10-1 19:34
冒泡是由大到小的计算排序,,,,,,,选择是由小到大的
作者: 周军福    时间: 2016-10-1 19:40
选择的方法不同!
作者: zhaokun1114    时间: 2016-10-1 20:20
冒泡排序是相邻的比较,大的往后移.得到最大的数,;;;选择排序是第一个跟后面每一个进行比较,得到最小的数
作者: liuhongbo    时间: 2016-10-1 21:25
这还用说啊  比较的方式不同啊
作者: Dreamkele    时间: 2016-10-5 22:00
public static void quickSort(int[] arr,int left,int right) {
                if (left> right) {
                        return;
                }
                int i = left; int j = right;
                int baseNum = arr[left];
                while (i!=j) {
                        while (arr[j] >= baseNum && j> i) {
                                j--;
                        }
                        while (arr[i] <= baseNum && i< j) {
                                i++;
                        }
                        if (i<j) {
                                int temp = arr[i];
                                arr[i] = arr[j];
                                arr[j] = temp;
                        }
                }
                //程序到达此处i= j 将i索引上的数和基准数呼唤位置
                arr[left] = arr[i];
                arr[i] = baseNum;
                //利用方法的递归再次调用快排方法
                quickSort(arr,left,i -1);        //排基准数的左边
                quickSort(arr,j+1,right);        //排基准数的右边
        }
public static void main(String[] args) {
               int[] arr = {1,2,3,5,6,4};
                quickSort(arr,0,arr.lenth-1);
}
楼主需要提高的话可以看看这种,个人感觉选择冒泡都属于基本排序,谈不上效率.
作者: marsfan    时间: 2016-10-5 22:27
冒泡排序每次比较的是两个相邻的数,一次比较的结果是最大数出现在最后,就像气泡一样上浮,所以称之为冒泡排序;选择排序是取第一个数,将它与剩下数的最小值交换。两者排序一次进行数据交换的次数不同,而且选择排序是不稳定的,使用哪个都可以




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