冒泡排序

Never妥协 2020-10-03 01:17:50

private static void bubbleSort(int[] arrays){
int len = arrays.length;
int temp;
for(int i=0;i<len-1;i++){
for(int j=0;j<len-i-1;j++){
if(arrays[j]>arrays[j+1]){
temp=arrays[j+1];
arrays[j+1]=arrays[j];
arrays[j]=temp;
}
}
}
System.out.println(Arrays.toString(arrays));
}

冒泡排序是否稳定不应该看的是arrays[j]和arrays[j+1]相等时是否会发生交换,那么如果我将上面的代码改成

if(arrays[j]>=arrays[j+1]){
temp=arrays[j+1];
arrays[j+1]=arrays[j];
arrays[j]=temp;
}

即在相等时,仍然发生交换,那么还是稳定的吗?
这样思考的话,这种排序算法是否稳定不应该是根据代码决定的吗?为什么看到大家都在说冒泡排序是稳定的呢?
...全文
17190 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2020-10-10
  • 打赏
  • 举报
回复
引用 楼主 Never妥协 的回复:
即在相等时,仍然发生交换,那么还是稳定的吗? 这样思考的话,这种排序算法是否稳定不应该是根据代码决定的吗?为什么看到大家都在说冒泡排序是稳定的呢?
你改了后是不稳定的,稳定性的定义就是不改变相等数的相对顺序。冒泡算法定义就是不交换相等数的顺序,所以冒泡算法是稳定的,你这样改了就不能算是冒泡算法了。
KeepSayingNo 2020-10-09
  • 打赏
  • 举报
回复
稳定不稳定应该是从整体已排序好的元素是否移动来看吧
new var meiNv 2020-10-08
  • 打赏
  • 举报
回复
这个稳定的话应该是指,不管未排序数据的顺序如何,都是要经过n-1轮的外层循环,就算是已经是顺序排序的,还是要经过n-1此外层循环
luj_1768 2020-10-04
  • 打赏
  • 举报
回复
冒泡排序算法,还有一种稳定性问题是由数据连续碰撞引起的。
qybao 2020-10-03
  • 打赏
  • 举报
回复
第二种写法确实是不稳定的
但是,常规思维(也就是讨论稳定的前提条件)都是不同才交换,相同就不交换,所以基于这个前提(否则所有排序都不稳定),冒泡是稳定的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧