返回信息流目前会的优化程序是这样的:
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,是不是就是最优的?
请大神指点。
这是一条镜像帖。来源:北邮人论坛 / java / #58289同步于 2017/12/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
学渣求问:冒泡排序优化
zhaoxiyuan
2017/12/7镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
【 在 zhaoxiyuan 的大作中提到: 】
: 目前会的优化程序是这样的:
: public static void bubbleSortOptimization2(int a[]) {
: int N = a.length;
: ...................
一种优化是这个,还有另一种叫鸡尾酒排序,有兴趣可以搜搜