所以我正在制作一个简单的排序程序,但排序方法返回0而不是正在排序的数组的数字。也许有人可以说明为什么会发生这种情况。数字本身取自.txt文件,然后按数字顺序排序。
import java.io.File;
import java.util.Scanner;
public class quickSort{
public static void main(String[] args) throws Exception {
File infile = new File("input.txt");
Scanner input = new Scanner(infile);
int[] data = new int[100];
int x, count;
count = 0;
while (input.hasNext()){
x = input.nextInt();
data[count++] = x;
}
System.out.println("Array before Sort");
for (int i = 0; i < count; i++){
System.out.printf(" %d", data[i]);
if ((i+1)%7==0) System.out.println();
}
quicksort(data, count);
System.out.println("\n\nArray after quickSort");
for (int i = 0; i < count; i++){
System.out.printf(" %d", data[i]);
if ((i + 1)%7==0) System.out.println();
}
System.out.println();
}
public static void quicksort(int[] data, int count) {
quicksortHelper(data, 100, data.length - 1);
}
在此行上方更改0到100之间的代码会稍微修改输出。
protected static void quicksortHelper(int[] data, int bottom, int top){
if (bottom < top) {
int midpoint = partition(data,bottom,top);
quicksortHelper(data, bottom, midpoint -1 );
quicksortHelper(data, midpoint + 1, top);
}
}
protected static int partition(int[] data, int bottom, int top){
int pivot = data[top];
int firstAfterSmall = bottom;
for (int i = bottom ; i < top; i++){
if (data[i] <= pivot) {
swap(data, firstAfterSmall, i);
firstAfterSmall++;
}
}
swap(data, firstAfterSmall, top);
return firstAfterSmall;
}
protected static void swap(int[] data, int i, int j){
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
任何帮助都表示赞赏,我的大脑即将爆发这个问题。
示例输出: 排序前的数组 1 5 3 2 9 10 100 4 6 5
快速排序后的数组 1 6 3 2 9 10 100 4 6 5
如果上面提到的数字变为0,那么“快速排序之后的数组”将被打印在所有0中,例如
快速排序后的数组 0 0 0 0 0 0 0 0 0 0
答案 0 :(得分:1)
在quicksort
方法中,使用参数(100,data.length - 1)调用quicksortHelper
。这将对数组的最后一个元素进行排序,这不是有用的。将其更改为:
quicksortHelper(data, 0, count);
就始终打印0而言,没有进一步的洞察力,除了检查input.txt
中的数据并确保其中只有100个整数之外,无法真正帮助,否则您的数组值不会被初始化。
虽然我认为这是一项任务,而不是重新发明轮子,但你总是可以调用Arrays.sort来完成这项任务。
编辑:
第二个参数应该是count
而不是data.length - 1
,否则,你正在对包含~90 0的数组进行排序然后只打印出前10个,在排序整个事物之后将全部为0。因此,您只想对第一个count
项进行排序。
答案 1 :(得分:0)
您可以使用Arrays.sort(data)
进行排序,而不是使用所有混乱的代码:)