问题:已知10个数据元素为(54,28,16,34,73,62,95,60,26,43),对该数列按从小到大排序,经过一趟冒泡排序后的序列为:
答案是:28,16,34,54,62,73,60,26,43,95
但有些不明白,泡冒不就是把行的数据竖着放, 然后从底下开始,相邻的比较,小的往上走, 一次找出一个小的往前放. 这里说经过一趟冒泡排序,数据序列不是: 16,54,28,26,34,73,62,95,60,43吗?
但不管怎解释, 我的答案还是错的, 回来后找出教程看了, 例子
[49,38,65,97,76,13,27,49]
一趟后结果为13,[49,38,65,97,76,27,49]
我在C#里写的代码调试也是得出16,54,28,26,34,73,62,95,60,43结果.
//PaoMaoSort static void PaoMaoSort(int[] a) { int ex, tmp; for (int i = 0; i < 1; i++) { ex = 0; for (int j = a.Length - 1; j > i; j--) { if (a[j] < a[j - 1]) { tmp = a[j]; a[j] = a[j - 1]; a[j - 1] = tmp; ex = 1; } } if (ex >= 0) { for (int k = 0; k < a.Length; k++) { Console.Write(a[k] + ", "); } Console.ReadLine(); } } }
i从0到小于1,是排一趟, 得出下面
但一个面试我的教授的答案却是28,16,34,54,62,73,60,26,43,95, 有人帮我解答一二吗?
你我没有验证你的排序最后对不对,我正想说冒泡是从最后一个元素开始的
54,28,16,34,73,62,95,60,26,43
第一次排序步骤:
43和26不交换 确定43
26和60交换 确定60,43
26和95交换 确定95,60,43
直到第一个元素 所以你的答案没问题
另一种顺序,就是从第一个元素开始比较直到最后一个元素结果就是你说的答案
所以两种方式都没问题,冒泡排序讲的是一种处理逻辑,但不是说起始一定要从前面或后面开始。
谢谢解答,艺清楚了, 面试时一个教授说他的答案才正确, 搞得我对冒泡都怀疑, 当时也不问他深入.
声明:我只是菜鸟,你内一列数冒泡从小到大排难道不是16,26,28,34,43,54,60,62,73,95么?还是说我对冒泡排序的理解是错的?
原来是经过一趟冒泡排序 - - 我眼瞎了 不好意思
楼上 正解