我正在尝试实现整数数组的bubblesort,以便所有以数字5结尾的数字首先(升序),然后是所有不以5结尾的数字(升序)。
在BubbleSort之前:[5,1,23,45,65,89,-85,-76]
在Bubblesort之后(结束数字5(升序)):[ - 85,5,45,65,-76,1,23,89]
所以我确实知道如何编写标准的Bubblesort,但我无法围绕附加规则(以数字5结尾)。任何帮助表示赞赏。
谢谢
答案 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)
正如你所说,你知道标准的冒泡排序,现在好了以下
一个为5的倍数,其余为剩余的
现在只需制作标准的气泡排序功能bubblesort(array [])
过滤两个阵列的输入