洛谷不建议用Java封装好的sort,于是自己写了一个快排,开始全RE。然后花了我将近半小时才找到错误😒
emmmm属实被自己蠢死了😅
不说了,上代码。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Scanner;
//这里使用了快速读写IO
public class Main {
static int[] m; //定义全局变量,用来存储读入的n个数
static void sort(int a, int b) {
int key = m[(a+b)/2];
//int i=0,j=b;
//就是错的这个地方😅
int i=a,j=b;
do {
while(m[i]<key) i++;//在左边找比key大的
while(m[j]>key) j--;//在右边找比key小的
if(i<=j) {//交换
int z = m[i];
m[i] = m[j];
m[j] = z;
i++;
j--;
}
}while(i<=j);
//递归
if(j>a) sort(a,j);
if(i<b) sort(i,b);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer in = new StreamTokenizer(br);
PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
in.nextToken();
int n = (int)in.nval;
m = new int[n];
for(int i=0; i<n; i++) {
in.nextToken();
m[i] = (int)in.nval;
}
sort(0,n-1);
for(int i=0; i<n-1; i++) {
pr.print(m[i]+" ");
}
pr.println(m[n-1]);
pr.flush();
}
}
使用buffer来读写可以节省比较多的时间,当然这题不使用也可以AC通过。