在Java中实现选择排序

时间:2012-03-15 13:19:32

标签: java

我想我已经完成了选择,但我不确定。这真的是选择排序的实现吗?

static void selectionSort()
    {
        int min = Integer.MIN_VALUE;
        int n = 0;
        for(int I=0; I<arraySize; I++)
        {

            min = dataArray[I];
            for(int j=I; j<n; j++)
            {
                if(dataArray[min]<dataArray[j])
                  {
                        min = j;
                        if(dataArray[min] < dataArray[I])
                        {
                            int temp = dataArray[I];
                            dataArray[I] = dataArray[min];
                            dataArray[min] = temp;
                        }
                  }
            }
        }   
    }

3 个答案:

答案 0 :(得分:4)

我不确定我理解你的算法是如何运作的。具体来说,你做了

min = dataArray[i];

然后再

dataArray[min]<dataArray[j]

即。您将min视为数组中的值和索引。

选择排序的工作原理如下:

  1. 在列表中找到最小值
  2. 将其与第一个位置的值交换
  3. 对列表的其余部分重复上述步骤
  4. source


    您的代码准确实现选择排序所需的更改如下:

    1. 将内循环更改为只需找到最小元素的索引。例如,将其称为minIndex
    2. 在内循环之后交换。即,索引IminIndex的交换元素。
    3. 哦,正如DonCallisto在评论中指出的那样,您可能希望n = dataArray.length代替n = 0: - )

答案 1 :(得分:2)

public class SelectionSort {

 /**
  * @Author Chandrasekhara Kota
  */

 public static void main(String[] args) {

        int arr[]={9,1,8,5,7,-1,6,0,2,2718};
        int sortedArr[]=selectionSort(arr);
        for (int i = 0; i <sortedArr.length; i++) 
        { 
           System.out.println(sortedArr[i]);
        }

      }

      private static int[] selectionSort(int[] arr) { 

      int  minIndex, tmp; 
      int n = arr.length; 
      for (int i = 0; i < n - 1; i++) 
      { 
              minIndex = i; 
              for (int j = i + 1; j < n; j++) 
                   if (arr[j] < arr[minIndex]) 
                        minIndex = j; 
              if (minIndex != i) { 
                    tmp = arr[i]; 
                    arr[i] = arr[minIndex]; 
                    arr[minIndex] = tmp; 
              } 
        }
  return arr; 

}

}

答案 2 :(得分:0)

这是java中的选择排序实现 -

public class SelectionSort {

static int intArray[] = { 10, 5, 100, 1, 10000 };

public static void doSort() {
    for (int outer = 0; outer < intArray.length; outer++) {
        int minPosition=outer;
        for(int inner=outer;inner<intArray.length;inner++){
            if(intArray[inner]<intArray[minPosition]){
                minPosition=inner;
            }
        }
        int temp=intArray[minPosition];
        intArray[minPosition]=intArray[outer];
        intArray[outer]=temp;
    }
}

public static void printArray() {
    for (int i = 0; i < intArray.length; i++) {
        System.out.print("  " + intArray[i]);
    }
}

public static void main(String args[]) {
    System.out.print("Array Before Sorting->");
    printArray();
    doSort();
    System.out.print("\nArray After Sorting ->");
    printArray();
}

}

以上代码摘自 - http://www.javabrahman.com/algorithms-in-java/selection-sort-in-java/。此链接有关上述代码工作的详细说明,以防您需要相同的内容。