Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算选择排序中的交换数_Java_Sorting - Fatal编程技术网

Java 计算选择排序中的交换数

Java 计算选择排序中的交换数,java,sorting,Java,Sorting,我已经通读了所有的讨论,试图找到一个答案,但没有一个答案对我有效,所以我尝试这样做 public static int SelectionSort(long[] num) { int i, j, first; long temp; int swap = 0; int pass = 0; int count = 0; boolean Mini = false; for (i = num.length - 1; i > 0; i

我已经通读了所有的讨论,试图找到一个答案,但没有一个答案对我有效,所以我尝试这样做

public static int SelectionSort(long[] num)
{
    int i, j, first;
    long temp;
    int swap = 0;
    int pass = 0;
    int count = 0;
    boolean Mini = false;

    for (i = num.length - 1; i > 0; i--)
    {
        for(int k = 0; k < num.length; k++)
        {
            System.out.println(" k = " + k
            + "   \t X[i] = " + num[k] + " swap count: " + swap);
        }
        System.out.println("");
        first = 0;   //initialize to subscript of first element
        for(j = 1; j <= i; j ++)   //locate smallest element between positions 1 and i.
        {
            if(num[j] < num[first])
            {
                first = j;
                //Mini = true;
            }
        }

        //if(Mini){
            //  swap++;
        //}
        temp = num[first];   //swap smallest found with element in position i.
        num[first] = num[i];
        num[i] = temp;
    }
    return swap;
}
使用简单数组作为我的测试用例:

long[] X = {1, 4, 3, 2, 5};

交换的数量应该只等于1,因为它只交换第一个和最后一个元素。然而,它不起作用。虽然我知道如果我的条件不起作用,但我想不出什么会起作用。我似乎无法理解这样的逻辑,即当项目实际交换时,它会增加交换。

为什么不在实际执行交换时增加计数器

//swap smallest found with element in position i.
swap++
temp = num[first];
num[first] = num[i];
num[i] = temp;
编辑:
评论中的观点很好。如果数组已排序(即,
first
i
相同),则当前代码仍执行多余的交换:


为什么不在实际执行交换时增加计数器

//swap smallest found with element in position i.
swap++
temp = num[first];
num[first] = num[i];
num[i] = temp;
编辑:
评论中的观点很好。如果数组已排序(即,
first
i
相同),则当前代码仍执行多余的交换:


为什么不在实际执行交换时增加计数器

//swap smallest found with element in position i.
swap++
temp = num[first];
num[first] = num[i];
num[i] = temp;
编辑:
评论中的观点很好。如果数组已排序(即,
first
i
相同),则当前代码仍执行多余的交换:


为什么不在实际执行交换时增加计数器

//swap smallest found with element in position i.
swap++
temp = num[first];
num[first] = num[i];
num[i] = temp;
编辑:
评论中的观点很好。如果数组已排序(即,
first
i
相同),则当前代码仍执行多余的交换:


在您的实现中,您将始终有n个交换(其中n是数组中的元素数)

我想你想要的是,只有在交换真正起作用的时候才执行交换。。。所以当“第一”和“我”有不同的价值观时。否则,将使用元素本身切换元素

  if (first != i) {
    temp = num[first];
    num[first] = num[i];
    num[i] = temp; 
    swapp++;
  }

在您的实现中,您将始终有n个交换(其中n是数组中的元素数)

我想你想要的是,只有在交换真正起作用的时候才执行交换。。。所以当“第一”和“我”有不同的价值观时。否则,将使用元素本身切换元素

  if (first != i) {
    temp = num[first];
    num[first] = num[i];
    num[i] = temp; 
    swapp++;
  }

在您的实现中,您将始终有n个交换(其中n是数组中的元素数)

我想你想要的是,只有在交换真正起作用的时候才执行交换。。。所以当“第一”和“我”有不同的价值观时。否则,将使用元素本身切换元素

  if (first != i) {
    temp = num[first];
    num[first] = num[i];
    num[i] = temp; 
    swapp++;
  }

在您的实现中,您将始终有n个交换(其中n是数组中的元素数)

我想你想要的是,只有在交换真正起作用的时候才执行交换。。。所以当“第一”和“我”有不同的价值观时。否则,将使用元素本身切换元素

  if (first != i) {
    temp = num[first];
    num[first] = num[i];
    num[i] = temp; 
    swapp++;
  }

唯一的问题是程序每次都会增加交换。我只希望它在交换时增加。现在如果我在那里增加交换,它将给我一个交换总数4。它应该只给我1的交换。唯一的问题是程序每次都会增加交换。我只希望它在交换时增加。现在如果我在那里增加交换,它将给我一个交换总数4。它应该只给我1的交换。唯一的问题是程序每次都会增加交换。我只希望它在交换时增加。现在如果我在那里增加交换,它将给我一个交换总数4。它应该只给我1的交换。唯一的问题是程序每次都会增加交换。我只希望它在交换时增加。现在如果我在那里增加交换,它将给我一个交换总数4。它应该只给我1的交换。