【发布时间】:2016-01-30 23:16:23
【问题描述】:
我正在尝试编写一个程序以仅使用 2 个进程对字符串执行递归排序:
- 将最后一个字符移到前面,并将其他所有字符移到右侧。
- 交换数组中的第一个和第二个字符。
例如,如果我有一个 char 数组 {"b","e","c","a","d"};
在此测试用例中,程序将按以下顺序执行过程:
2111212 最终获得所需的输出 ("abcde")。
我试图弄清楚我需要使用什么程序逻辑来实现这种行为,这是我迄今为止尝试过的:
private static int sort(String[] items, String[] target, int first, int last) {
if(Arrays.equals(target, items)) {
return 1;
}
else if(items[first].compareTo(items[last]) > 0) {
String temp = items[last];
for(int i = last-1; i >= 0; i--) {
items[i+1] = items[i];
}
items[first] = temp;
System.out.print("s ");
System.out.println(Arrays.toString(items));
return sort(items,target,first,last);
}
else if (items[first].compareTo(items[first+1]) < 0){
String temp = items[first];
items[first] = items[first+1];
items[first+1] = temp;
System.out.print("b ");
System.out.println(Arrays.toString(items));
return sort(items,target,first,last);
}
return 2;
}
输出不太正确,我认为我在某处有逻辑错误。
【问题讨论】:
-
规则似乎面向迭代过程,而不是递归过程。递归是必需的吗?正如已经回答的那样,可以使用任何相邻的交换方法,如冒泡排序。
-
除规则外无要求
-
我对问题进行了一些非常激烈的重新格式化。 OP,如果您认为这会损害您帖子的意图,您可以在修订历史记录中回滚。