黑马程序员技术交流社区

标题: 冒牌排序的算法优化 [打印本页]

作者: Kingdragon    时间: 2016-7-26 22:10
标题: 冒牌排序的算法优化
for(int i = 0; i < array.length ; i++){
int x = 0;
for (int j = i +1; j < array.length - i - 1; j++){
      if (array[j] >array[j + 1]){
         if(array[x] < array[j]){
             x = j;
         }
      }
}
if(array[x] > array[array.length - i -1]){
  int temp = array[x];
  array [array.length - i -1] = array[x];
array[x] = temp;
}
}

作者: Kingdragon    时间: 2016-7-26 22:23
自己写的不知道对不对
作者: q123123    时间: 2016-7-26 22:31
表示看不懂 下边那个循环是什么意义...
作者: Kingdragon    时间: 2016-7-26 23:41
q123123 发表于 2016-7-26 22:31
表示看不懂 下边那个循环是什么意义...

内循环记录角标 外循环将记录的角标的数(当前最大的数)与最后的一个数换位置
作者: M_J    时间: 2016-7-26 23:58
标题: RE: 冒牌排序的算法优化
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
//随机产生20个1-100的整数,写入数组,排序
public class Demo {
        public static void main(String[] args) {
                List<Integer> list1 = new ArrayList<Integer>();
                Random r = new Random();
                for(int i=0;i<20;i++){
                        list1.add(r.nextInt(100));
                }
                System.out.println("初始顺序是:");
                System.out.println(list1);
                int min = list1.get(0);
                for(int i=0;i<list1.size();i++){
                        for(int j=i+1;j<list1.size();j++){
                                if(list1.get(j)<list1.get(i)){
                                        min = list1.get(i);
                                        list1.set(i,list1.get(j));
                                        list1.set(j, min);
                                }
                        }
                }
                System.out.println("冒泡法排序后从小到大是:");
                System.out.println(list1);
        }
}
这是我下午写的

作者: Kingdragon    时间: 2016-7-27 00:06
M_J 发表于 2016-7-26 23:58
[mw_shl_code=java,true]import java.util.ArrayList;
import java.util.List;
import java.util.Random;

你的是在内循环中换位置(会换很多次)
在堆内存中这样做很消耗资源
如果是在外循环 最多l只需换ist.size()-1次
大大提高了运行效率 当然这是在处理大数组 集合数据是才能体现出来

作者: fzc123    时间: 2016-7-27 00:10
集合里面的-i-1?这样写不会出错吗
作者: Kingdragon    时间: 2016-7-27 21:54
fzc123 发表于 2016-7-27 00:10
集合里面的-i-1?这样写不会出错吗

会出错 没仔细看 主要讨论的是思想{:2_31:}
作者: haochengjian    时间: 2016-7-27 22:06
冒牌儿排序?
作者: Kingdragon    时间: 2016-7-27 22:22
haochengjian 发表于 2016-7-27 22:06
冒牌儿排序?

冒泡的优化
作者: wyq0627java11    时间: 2016-7-27 22:45
最后的if 语句里 的好像有问题,你应该是要把2个数互换吧?
是不是该这么写呢
int temp = array[x];
array[x] =  array [array.length - i -1] ;
array [array.length - i -1] = temp;
作者: wx_pmVIrag6    时间: 2016-7-27 23:15
让发个广告多个
作者: qetu001212    时间: 2016-7-27 23:29
一个月前随手写的,拿去吧~~~
/*
        冒泡排序:
                                        1.从第一个开始遍历
                                        2.比较第一个值和第二个值的大小
                                        3.大:将第一个值和第二个值交换
                                           小:不变
                                        4.从第二个开始遍历
*/
class BuddleTest {
        public static void main(String[] args) {
                //定义数组
                int[] a = {18,12,3,54,5,46,7,28,9};
                //遍历
                for(int x = 0;x < a.length-1;x++) {
                        for(int y = 0;y < a.length-1-x;y++) {
                        if(a[y]>a[y+1]) {
                                int temp;
                                temp = a[y];
                                a[y] = a[y+1];
                                a[y+1] =temp;
                                }
                        }
                }

                for(int y = 0;y < a.length;y++) {
                        System.out.print(a[y]+" ");
                }
        }
}

作者: belowfox    时间: 2016-7-28 09:28
好牛逼的赶脚,你懂的
作者: 愿望变美    时间: 2016-7-28 22:28
冒泡排序应该都这个道理了吧
[Java] 纯文本查看 复制代码
public static void bubblesort(int[] arr) {
                for(int j = 0; j < arr.length - 1; j++){
                        for(int i = 0;i < arr.length - 1 - j; i++) {
                                if(arr > arr[i + 1]) {
                                        swap(arr, i, i + 1);
                                }
                        }
                }
                print(arr);
}


主要应该就是这部分了吧

作者: huangzhaoqing    时间: 2016-7-28 22:31
表示不懂
作者: Kingdragon    时间: 2016-7-28 23:07
我说的是效率优化  冒泡的优化!!!!
将换位置操作移到外循环中





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