黑马程序员技术交流社区

标题: 分享一下我对选择和冒泡两种排序的理解 [打印本页]

作者: yuexiazixia    时间: 2016-2-16 18:44
标题: 分享一下我对选择和冒泡两种排序的理解
本帖最后由 yuexiazixia 于 2016-2-16 18:48 编辑

冒泡排序和直接选择排序都是排序中比较简单和容易实现的算法,先简单说说两者的区别:先以按照元素从小到大为:
冒泡排序:将相邻元素两两比较,如果有比较大的,就把比较大的放在右边,这样的结果就是一轮排序完毕后最大的数直接被放在了最右边,然后从左边第二个数开始比较,以此类推,直到倒数第二个数为止。
选择排序:与冒泡排序不同,选择排序采取的是从第二位开始检查,如果发现有数最小就记下该数的为止,等到检查完毕然后再把该数和第一位交换,所以选择排序每一轮可能只要一次交换,而冒泡可能要交换很多次。两者比较的次数相同,因此外层循环是一样的。
具体来说,我们以数组的排序为例
arr[]={4,3,2,1}  ,其中arr[0]=4,arr[1]=3,arr[2]=2,arr[3]=1;
冒泡排序的代码是:以上是老师提供的代码
for(int i=0;i<arr.length-1;i++){//外循环表示比较次数,要比较数组长度-1次
for(int j=0;j<arr.length-i-1;j++){//内层循环表示两两比较的次数,因为每一次比较都有一个最大值被放在右边,因此每次只需要比较数组长度-i即可for(arr[j]>arr[j+1]){//把大的值放右边
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=arr[j]
}
}
}
冒泡排序是对arr[0]到arr.length-i-1进行排序,这是一种内排序,范围是逐渐缩小的


选择排序
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
for(arr>arr[j]){//把小的值放在左边
int temp=arr;
arr=arr[j];
arr[j]=temp

}
}
选择排序比起冒泡排序来说提高了一些效率,顺便说1下冒泡排序最后一位不需要比较,选择排序从i+1位开始比较,最后一位需要比较

选择排序是a与a[i+1]到arr.length进行比较,这是一种外部排序



作者: zzh111    时间: 2016-2-18 00:47
学习 了!!!
作者: Petergee    时间: 2016-2-18 16:20
刚学过这一节,复习一下




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