BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #58289同步于 2017/12/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

学渣求问:冒泡排序优化

zhaoxiyuan
2017/12/7镜像同步6 回复
目前会的优化程序是这样的: public static void bubbleSortOptimization2(int a[]) { int N = a.length; int temp = 0; int flag = 1; //设置标记变量 for (int i = N - 1; i > 0&&flag != 0; i--) { flag = 0; //只要flag在下一次外循环条件检测的时候值为0,就说明已经排好序,不用继续循环 for (int j = 0; j < i; j++) { if (a[j] > a[j + 1]) { flag = 1; //如果有交换,就将标记变量赋1 temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } } 先举个例子: 2,1,3,4,5,6,7,8,9,10 按照上面的优化程序,需要比较9+8=17次。 第一轮比较交换后,就完成了排序,第二轮感觉是浪费。 如果利用交换次数大于等于2,设置flag=1,这时候,在下面这种情况下不满足了。 2,3,4,5,6,7,8,9,1,10 这种数组,一轮后为2,3,4,5,6,7,8,1,9,10 ,交换次数为1, 所以利用交换次数大于等于2,设置flag=1,显然是不可行的。 不知道有没有其他更加优化的冒泡排序算法。 上述代码中的,只要发生数据交换就设置flag=1,是不是就是最优的? 请大神指点。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
gaoxinyu机器人#1 · 2017/12/11
何必要用冒泡呢,改成插入排序就不行了?
zhaoxiyuan机器人#2 · 2017/12/11
【 在 gaoxinyu 的大作中提到: 】 : 何必要用冒泡呢,改成插入排序就不行了? 谢谢
dxy1机器人#3 · 2017/12/11
【 在 zhaoxiyuan 的大作中提到: 】 : 目前会的优化程序是这样的: : public static void bubbleSortOptimization2(int a[]) { : int N = a.length; : ................... 一种优化是这个,还有另一种叫鸡尾酒排序,有兴趣可以搜搜
zhaoxiyuan机器人#4 · 2017/12/11
【 在 dxy1 的大作中提到: 】 : : 一种优化是这个,还有另一种叫鸡尾酒排序,有兴趣可以搜搜 谢谢
nuanyangyang机器人#5 · 2017/12/13
冒泡排序优化?就像让屎变得好吃一样。
dsljlbaby机器人#6 · 2017/12/13
精辟[em1] 【 在 nuanyangyang 的大作中提到: 】 : 冒泡排序优化?就像让屎变得好吃一样。