选择排序交换计数

时间:2014-10-21 12:12:01

标签: java arrays sorting

我有一个包含用户输入的数组。该程序是关于冒泡排序,选择排序和插入排序。我无法解决选择部分中的问题。交换计数器总是给我数组的长度 - 1.我知道这是因为第一个for循环但我找不到任何解决方案。

int SComparison = 0;
int SSwaps = 0;

for (int i = 0; i < SorBag.length - 1; i++) {
        min = i;

        for (int j = i + 1; j < SorBag.length; j++) {
            SComparison++;

            if (SorBag[j] < SorBag[min]) {
                min = j;

            }
        }

        SSwaps++;
        temp2 = SorBag[i];
        SorBag[i] = SorBag[min];
        SorBag[min] = temp2;
    }

我尝试将SSwaps放入“if”,它总是给我0.我尝试制作一个“if”来查找有多少数组元素小于第一个数组元素。还是一样。应该把SSwaps ++放在哪里?谢谢!

3 个答案:

答案 0 :(得分:0)

检查此代码:

public class Test {


    public static void main(String[] args) {

        int SComparison = 0;
         int SSwaps = 0;
         int totalSwap=0;
        int min = 0;
        int temp = 0;
        int SorBag[] = { 1, 4, 3 };

        for (int i = 0; i < SorBag.length - 1; i++) {
            min = i;

            for (int j = i + 1; j < SorBag.length; j++) {
                SComparison++;

                if (SorBag[j] < SorBag[min]) {
                    min = j;
                    temp = SorBag[i];
                    SorBag[i] = SorBag[min];
                    SorBag[min] = temp;
                    SSwaps++;
                    totalSwap+=SSwaps;
                    System.out.println("swap count at "+j+" pass : "+SSwaps);
                }
            }
            SSwaps=0;


        }
        for (int i = 0; i < SorBag.length; i++) 
            System.out.print(SorBag[i]+" ");

        System.out.println("\nTotal swap count :"+totalSwap);
    }


}

输出:

swap count at 2 pass : 1
1 3 4 
Total swap count :1

答案 1 :(得分:0)

选择排序通过比较(您的if ...)更新min 索引,并在需要时执行元素交换

您将swapps++置于正确的位置。但你应该检查min == i。您只想在min !=i时进行交换。相反,你没有检查,反正只是交换。这就是你修复length -1

的原因

P.S。请尝试遵循java命名约定。

答案 2 :(得分:0)

问题是什么? 使用您的代码,这可以提供4次交换,这是正确的。

    int[] SorBag = new int[]{5 ,4 ,3 ,2 ,1};
    int min = 0;
    int SComparison = 0;
    int SSwaps = 0;

    for (int i = 0; i < SorBag.length - 1; i++) {
            min = i;

            for (int j = i + 1; j < SorBag.length; j++) {
                SComparison++;

                if (SorBag[j] < SorBag[min]) {
                    min = j;
                    SSwaps++;
                }
            }


            int temp2 = SorBag[i];
            SorBag[i] = SorBag[min];
            SorBag[min] = temp2;
        }
    System.out.println("sswaps : "+SSwaps);

    for(int i = 0; i<5;i++){
        System.out.println("SorBag["+i+"] = "+SorBag[i]);
    }
}