排序算法正在跳过我的数组中的最后一个元素

时间:2017-11-02 14:53:42

标签: algorithm

我有一个简单的算法来对数组中的数字进行排序,所有元素都会被排序,除了最后一个。我已经尝试更改我的循环的边界来修复它,但它只是创建了一个无限循环。

1 个答案:

答案 0 :(得分:0)

while (pointer < arrayLength){
    int min = findMinFrom(pointer);
    for (int i = pointer; i < arrayLength; i ++){
        if (A[i] == min){
            swap(i, pointer);
            pointer ++;
        }
        compNewS ++;
    }

}

你看到了什么问题?只有在A[i] == min时才会更新指针,否则它将继续循环。将您的pointer++排除在该状态之外。

这可以通过两个循环来完成,但这里是您的代码的调整版本:

public class Numbers {

private static int [] A ;

 public static void main(String [] args) {
     int [] array = {3,2,1,4,5,6,7,8,9,7};
     A = array;
     newSort(array, array.length);
     for(int i = 0; i < A.length;i++)
         System.out.println(A[i]);
 }

public static void newSort(int[] array, int arrayLength){
    int pointer = 0;
    int p = 0;
    while(p < array.length) {
        int min = findMinFrom(p,array);
        int temp = array[p];
        array[p] = min;
        array[min] = temp;
        p++;
    }
}



public static int findMinFrom(int p, int[] array){
    int min = p;
    for (int i = p; i < array.length; i ++){
        if (A[i] < array[p]){
            min =i;
        }
    }
    return min;
}

}