【问题标题】:Java Selection Sort ModificationJava 选择排序修改
【发布时间】:2015-12-14 14:57:38
【问题描述】:

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

所以我觉得还可以。为什么不直接删除外部 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;
}

【问题讨论】:

  • 你有什么问题?这个函数有什么问题?
  • 看到您的编辑。你的意思是你想打印出程序的每一步,比如312 -> 132 -> 123
  • 基本上我用条形图直观地显示这种排序,每次单击按钮时,它都会逐步完成排序并调整条形

标签: java sorting selection


【解决方案1】:

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

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);
}

【讨论】:

  • 找到了它最初不起作用的原因......我在错误的地方增加了索引哈哈。 掌心
【解决方案2】:

调用函数

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;
   }
}

【讨论】:

    【解决方案3】:

    检查这个..

    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 次即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-13
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多