首页 > 试题广场 >

分类算法稳定嘛?

[单选题]
请阅读该程序:
PROCEDURE bubblesort(r,n)
BEGIN
  i:=1; m:=n-1; flag:=1;
  WHILE (i<=m) AND (flag=1) DO
   BEGIN
     flag:=0;
     FOR j:=1 TO m DO
       IF r[j].key>r[j+1].key THEN
       BEGIN
         flag:=1; t:=r[j]; r[j]:=r[j+1]; r[j+1]:=t
       END;
       i:=i+1;m:=m-1
   END;
END.
该分类算法稳定吗?(  )
  • 稳定
  • 不稳定
  • 不确定
推荐
其实我看了比较多的算法排序,感觉数据结构书中给出的稳定不稳定有点问题。因为在比较的时候,完全是=号决定了是否稳定,那么编程的时候,根据需要自己决定了原本书中定义的稳定还是不稳定,比如quicksort这种,绝对是不稳定的,因为他不是比较前后,而是完全的大的后面,小的前面,因此可能乱掉。但是像bubblesort 和insertsort和selectsort完全由自己编程时候=号加不加决定。
其次本身bubblesort 书上就是说的稳定,而且这里没有=号,那即是3,3 前面的3不会和后面的3互换位置。所以。。。。点个赞吧。
编辑于 2016-03-05 16:37:15 回复(9)
line 8 交换条件是 > 所以应该是稳定的吧? 如果是 >= 就是不稳定了?
发表于 2015-08-27 17:15:34 回复(0)
这个难道不是稳定的吗?相等的值不会有处理啊?求大神解答
发表于 2015-08-27 11:52:50 回复(0)
这个是添加了一个交换与否标志的冒泡排序算法,冒泡排序本来就是稳定的,添加交换标志只是能够在已经有序时提前退出排序过程,所以还是稳定的。
发表于 2015-08-28 17:18:29 回复(0)
可以直接想一下相邻两个相等的数根据上面的r[j].key>r[j+1].key条件,是不是会交换,就可以判断出来是不是稳定的了。
发表于 2015-09-02 13:58:19 回复(0)
稳定的算法:值相等的数字排序后的相对位置不变
发表于 2022-01-29 09:33:41 回复(0)
常见稳定排序有冒泡,直接插入,归并排序。
发表于 2016-06-01 14:42:50 回复(0)
m:=m-1有问题。这样会改变外层循环的次数。把TO改成m-i-1
发表于 2015-08-27 11:17:10 回复(0)
while的代码应该是i<=n-1吧。。。
发表于 2015-08-27 11:06:21 回复(0)
算法名字英文翻译:冒泡排序,是稳定的排序算法,不用看代码。跟我整这些
发表于 2022-04-26 20:56:04 回复(0)
记忆:
稳定的排序:冒泡排序(包括原始和改进版本),归并排序。
不稳定的排序:堆排序,快速排序,选择排序。
编辑于 2017-06-21 09:24:33 回复(1)
相等的动不动,就可以知道稳定不稳定了·~
发表于 2016-09-17 14:21:14 回复(0)
为什么flag=1,难道不是flag==1吗?

发表于 2016-08-01 11:30:26 回复(0)
冒泡排序是
发表于 2016-06-13 21:18:32 回复(0)
冒泡排序是稳定的算法。
发表于 2016-06-03 20:30:12 回复(0)
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
发表于 2016-03-31 19:53:04 回复(0)
IF r[j].key >= r[j+1].key THEN   
加上=就不稳定了
发表于 2015-08-29 21:51:21 回复(0)
m:=m-1有问题。这样会改变外层循环的次数。把TO改成m-i-1
发表于 2015-08-27 11:17:10 回复(1)