【发布时间】:2017-03-12 15:15:07
【问题描述】:
我正在解决关于 SPOJ 的以下问题。它是简单的插入排序算法。我的 java 代码有效,但 C 代码给出了错误的答案。 我做错了什么?
请多多帮助,非常感谢......:)
java代码
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
while (t > 0) {
int n = Integer.parseInt(br.readLine());
String str = br.readLine();
String arr[] = str.split(" ");
int inputArr[] = new int[n];
for (int i = 0; i < n; i++) {
inputArr[i] = Integer.parseInt(arr[i]);
}
int key = 0;
int count = 0;
for( int i = 1; i < n; i++ ) {
key = inputArr[i];
int j = i - 1;
while (j >= 0 && inputArr[j] > key) {
inputArr[j + 1] = inputArr[j];
j = j - 1;
count++;
}
inputArr[j + 1] = key;
}
System.out.println(count);
t--;
}
}
}
C 代码
#include<stdio.h>
int main() {
int t=0;
scanf("%d",&t);
while( t > 0 ) {
int n=0;
scanf("%d",&n);
int arr[n];
int key=0;
for(int i=0; i<n; i++) {
scanf("%d",&arr[i]);
}
int count=0;
int j=0;
for(int i=1; i<n; i++) {
key = arr[i];
j = i - 1;
while(j>=0&&arr[j]>key) {
arr[j+1]=arr[j];
count++;
j = j-1;
}
arr[j+1]=key;
}
printf("%d",count);
t--;
}
return 0;
}
【问题讨论】:
-
怎么了?什么是正确的?您的输入是什么,预期的输出是什么?你实际看到了什么?
-
插入排序中交换操作的次数
-
您的 Java 代码使用了添加换行符的
println,但您的 C 代码在输出printf中没有“\n”。 -
@aragaer 谢谢,我是傻瓜,请您发表您的答案...:)
标签: java c insertion-sort