展开全部
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Scanner;
public class Quick2 {
public static void main(String[] args) throws Exception {
File file = new File("D:\\num.txt");//这里的路径改成你的文本路径
File fileout = new File("D:\\fw.txt");
OutputStreamWriter osr = new OutputStreamWriter(new FileOutputStream(fileout), "UTF-8");
BufferedWriter br = new BufferedWriter(osr);
Scanner sc = new Scanner(new FileReader(file));
ArrayList array = new ArrayList();
while(sc.hasNext()){
array.add(Integer.valueOf(sc.nextLine().trim()));
}
System.out.println(array);
int a[] = new int[array.size()];
for(int i =0;i
a[i]=array.get(i);
}
_quickSort(a, 0, a.length-1);
System.out.println("\n\n");
for(int i=0;i
br.write(String.valueOf(a[i]));//这里直接写入int类型的数e69da5e6ba9062616964757a686964616f31333332643265总是乱码,所以干脆转换成String类型的写入 了
br.write("\r\n");
}
br.flush();
sc.close();
osr.close();
br.close();
}
public static int getMiddle(int[] a, int low, int high) {
int tmp = a[low]; //数组的第一个作为中轴
while (low
while (low = tmp) { //网上排序有问题,这里没写>=写的>导致存在重//复的数时便陷入死循环,我给改了下
high--;
}
a[low] = a[high]; //比中轴小的记录移到低端
while (low
low++;
}
a[high] = a[low]; //比中轴大的记录移到高端
}
a[low] = tmp; //中轴记录到尾
return low; //返回中轴的位置
}
public static void _quickSort(int[] a, int low, int high) {
if (low
int middle = getMiddle(a, low, high); //将list数组进行一分为二
_quickSort(a, low, middle - 1); //对低字表进行递归排序
_quickSort(a, middle + 1, high); //对高字表进行递归排序
}
}
}
不好意思,昨晚没看清你的所有要求,漏了个输出。现在应该可以了,楼主试试吧,我写得也不容易,如果满意的话请采纳。