Java选择排序无法正常工作

时间:2015-12-07 20:00:08

标签: java sorting

我刚刚创建了一个名为'Statistics'的int []类,它有两个选择排序方法,用于按升序或降序列出Statistics对象(int [])中的整数。当我使用这些方法中的任何一种时,它们倾向于大约一半的时间工作,然后在另一半的时间不工作。以下是我的意思的几个例子:

New Run

Test1 = {2,5,3,7,8,9,6}

Test1.sortDataDsc()会给我:Test1 = {8,7,6,9,3,5,2}

Test1A = {8,7,6,9,3,5,2}

Test1A.sortDataAsc()会给我:{2,5,3,6,7,8,9}

New Run

Test1 = {2,5,3,7,8,9,6}

如果我先执行Test1.sortDataAsc(),它会正确地对数据进行排序,如果我这样做,也会按降序正确排序。

New Run

Test2 = {7,4,5,8,0,1}

Test2.sortDataAsc()会给我:{1,0,4,5,7,8}。

然后,它将按降序正确排序这些数字并返回正确的升序。

如果您以相同的顺序输入数字,我尝试过的所有测试用例都是可重复的。如果更改数字的顺序,则输出可能是正确的,也可能是不同的错误顺序。我已经排除了我能想到的每一个可能导致这个问题的问题,我在测试用例之间找不到任何相似之处。如果有人在我的代码中看到任何内容,我可以修复或添加以解决这种情况,我们将非常感激。

count =数组中元素的数量

//sortDataAsc Method - Sorts data elements in Statistics array from least to greatest
public void sortDataAsc(){
    int min, temp;
    for(int index = 0; index < count; index++){
        min = index;
        for(int scan = index + 1; scan < count; scan++){
            if(data[scan] < data[min]){
                min = scan;
            }
        temp = data[min];
        data[min] = data[index];
        data[index] = temp;
        }
    }
}

//sortDataDsc Method - Sorts data elements in Statistics array from greatest to least
public void sortDataDsc(){
    int max, temp;
    for(int index = 0; index < count; index++){
        max = index;
        for(int scan = index + 1; scan < count; scan++){
            if(data[scan] > data[max]){
                max = scan;
            }
        temp = data[max];
        data[max] = data[index];
        data[index] = temp;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

尝试将代码更改为

//sortDataAsc Method - Sorts data elements in Statistics array from least to greatest
public void sortDataAsc(){
    int min, temp;
    for(int index = 0; index < count; index++){
        min = index;
        for(int scan = index + 1; scan < count; scan++){
            if(data[scan] < data[min]){
                min = scan;
            }
        } // closing parenthesis here
        temp = data[min];
        data[min] = data[index];
        data[index] = temp;
    }
}

//sortDataDsc Method - Sorts data elements in Statistics array from greatest to least
public void sortDataDsc(){
    int max, temp;
    for(int index = 0; index < count; index++){
        max = index;
        for(int scan = index + 1; scan < count; scan++){
            if(data[scan] > data[max]){
                max = scan;
            }
        } // closing parenthesis here
        temp = data[max];
        data[max] = data[index];
        data[index] = temp;
    }
}

P.S。对于升序排序,您可以使用

Arrays.sort(array);

和降序排序

Integer[] arr = {2, 5, 3, 6, 1};
Arrays.sort(arr, Collections.reverseOrder());