Java选择排序修改

Java Selection Sort Modification

所以我编写了这个选择排序代码,但我希望它在每次调用该函数时递增一个排序循环。

所以我觉得还行。为什么不删除外部 for 循环并在顶部用静态变量替换 index 并在每次函数完成其操作时递增它。但这真的把事情搞砸了。有人可以帮忙吗?

问题:如何在每次调用函数时一步一步进行排序?

我不希望它一次对所有内容进行排序

private static void selectionSort(int[] array) {
    for (int index = 0; index < array.length; index++) {
        int currentMin = array[index];
        int indexOfMin = index;

        for(int j = index+1; j < array.length; j++) {
            if(array[j] < currentMin) { 
                currentMin = array[j];
                indexOfMin = j;
            }
        }
        swap(array, index, indexOfMin);
    }
}

private static void swap(int[] a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

为什么全局变量不能完成这项工作?你想要 post 你的解决方案,我们可以看看吗?或者您也可以将起始索引传递给函数,并在每次按下按钮时使用增量索引调用它。

private static void selectionSort(int fromIndex, int[] array) {
    int currentMin = array[fromIndex];
    int indexOfMin = fromIndex;

    for(int j = fromIndex+1; j < array.length; j++) {
        if(array[j] < currentMin) {
            currentMin = array[j];
            indexOfMin = j;
        }
    }
    swap(array, fromIndex, indexOfMin);
}

private static void swap(int[] a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

然后在main中,这样调用:

for (int fromIndex = 0; fromIndex < array.length; fromIndex++) {
    // Stop here and wait for button click.
    selectionSort(fromIndex, array);
}

调用函数

Collections.sort(array, new SortData());

在SortData.java

import java.util.Comparator;

import tg.cw.pd.model.ModelcurrentMin;

public class SortData implements Comparator<Object>
{
    public int compare(Object o1, Object o2) 
    {

        int result;

        String desc1 = ((ModelcurrentMin)o1).getcurrentMin();
        String desc2 = ((ModelcurrentMin)o2).getcurrentMin();

        result = desc1.compareTo(desc2);    //asc
        return   result;
   }
}

检查这个..

public static void main(String[] args) {
    int[] array = new int[]{3, 4, 2, 7, 1, 5, 6};
    System.out.println(Arrays.toString(array));   //[2, 4, 3, 7, 5, 1, 6]

    selectionSort(array);                         
    System.out.println(Arrays.toString(array));   //[1, 4, 3, 7, 5, 2, 6]

    selectionSort(array);                         
    System.out.println(Arrays.toString(array));   //[1, 2, 3, 7, 5, 4, 6]

    selectionSort(array);                        
    System.out.println(Arrays.toString(array));   //[1, 2, 3, 4, 5, 7, 6]

    selectionSort(array);                      
    System.out.println(Arrays.toString(array));   //[1, 2, 3, 4, 5, 6, 7]
}

private static void selectionSort(int[] array) {
    for (int index = 0; index < array.length; index++) {
        int currentMin = array[index];
        int indexOfMin = index;
        boolean swapNeeded = false;

        for (int j = index + 1; j < array.length; j++) {
            if (array[j] < currentMin) {
                currentMin = array[j];
                indexOfMin = j;
                swapNeeded = true;
            }
        }
        if (swapNeeded) {
            swap(array, index, indexOfMin);
            return;
        }
    }
}

private static void swap(int[] a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

selectionSort() 必须调用 7 次才能对该数组进行排序。

但是如果你考虑像{3, 5, 1, 4, 7, 6, 2}这样的数组,数组的3rd和4rd索引已经在排序的位置。因此,selectionSort() 只需调用 5 次。