选择排序:存储值而不是索引

Selection sort: storing value instead of index

我正在研究排序算法,包括选择排序,所以我决定写一个方法并且它工作正常,但是当我查看这本书时它有2个变量所以我检查它并发现它使用一个变量来将当前索引和另一个存储为临时交换

而我的只有临时变量,它也将初始 存储在索引中作为最低值,然后将其与数组中的其他值进行比较,如果较大则交换找到值。

这是我的代码:

public static void selectionSort(int[] arr){
int lowest;
for(int i = 0; i < arr.length - 1; i++){
  lowest = arr[i];
  for(int j = i+1; j<arr.length; j++){
    if(arr[j]<lowest){
      lowest = arr[j];
      arr[j] = arr[i];
      arr[i] = lowest;
    }
   } 
  }
 }

这是这本书的

public static void selectionSort(int[] list){   
    int min; 
    int temp;
    for(int i = 0; i < list.length - 1; i++) { 
        min = i;
        for(int j = i + 1; j < list.length; j++)
            if( list[j] < list[min] )
                min = j;
        temp = list[i];
        list[i] = list[min];
        list[min] = temp;
    }
}

所以我在网上看了看,都是按照书上的方法做的,所以我的代码是不好还是慢,还是不考虑选择排序?

抱歉有任何英文错误:P

您似乎在嵌套的 for 循环中进行了更多交换。

如果你做 [4,3,2,1] 会怎样?我想你会有比实际的 selectionSort 更多的交换操作。

我不确定您的代码是否错误或较慢。 已知 SelectionSort 是正确的,但它也不快。

原来的代码是这样的:

Start with the first element of the array
Find the smallest number in the array
Swap the two numbers
Repeat the process Until You reach the end of the list

当您这样做时:

Start with the first element of the array
For each element smaller than the current Swap the two numbers
Replace the lowest number with the swapped
Repeat the process

结果应该是一样的,但是你交换的数字可能比第一个多。这可能会使它比原来的慢一点。

实际上它现在看起来有点像插入排序,所以基本上你是在用所有比你拥有的更大的元素交换元素。