冒泡排序,以便以数字5结尾的所有数字按升序排列

时间:2015-02-01 04:02:49

标签: c algorithm bubble-sort

我正在尝试实现整数数组的bubblesort,以便所有以数字5结尾的数字首先(升序),然后是所有不以5结尾的数字(升序)。

在BubbleSort之前:[5,1,23,45,65,89,-85,-76]

在Bubblesort之后(结束数字5(升序)):[ - 85,5,45,65,-76,1,23,89]

所以我确实知道如何编写标准的Bubblesort,但我无法围绕附加规则(以数字5结尾)。任何帮助表示赞赏。

谢谢

2 个答案:

答案 0 :(得分:4)

唯一需要改变的是比较代码。

假设冒泡排序代码正在运行并使用简单的比较,如:

if (a < b) ...

创建如下功能。 a%10会产生值-9,-8,...,8,9。在此结果为5-5时进行测试。以下测试|a%10| == 5

// Return 1 when a should come before b in the array.
int cmp5(int a, int b) {
  int a5 = abs(a%10) == 5;
  int b5 = abs(b%10) == 5;
  // Since a and b are the same "five-ness", do a simple compare
  if (a5 == b5) return a < b;
  if (a5) return 1;
  return 0;
  // Could replace above 2 lines with `return a5;`
}

并致电

 if (cmp5(a,b)) ...

答案 1 :(得分:0)

正如你所说,你知道标准的冒泡排序,现在好了以下

  1. 取两个数组/向量(你喜欢的那个)
  2. 一个为5的倍数,其余为剩余的

  3. 现在只需制作标准的气泡排序功能bubblesort(array [])

  4. 过滤两个阵列的输入

  5. 过滤后调用冒泡排序并完成
  6. 将两个结果放在一起