选择排序两个鲜明的特点:
- 运行时间和输入无关:为了找出最小的元素而扫描一遍数组并不能为下一趟扫描提供任何有用的信息。一个已经有序的数组或者是元素全部相等的元素和一个随机排序的数组所用的排序时间一样长。
- 数据移动是最少的:显然可见,移动数据只发生在是外层循环中。故选择排序只用了N次交换,这是其他大部分算法不具备的。
package com.algorithms;import java.util.Arrays;public class Sort {private static int compareTo(double x, double y){if(x < y){return - 1;}else if(x > y){return 1;}else{return 0;}}private static void exchange(double[] A, int i, int j){double temp = A[i];A[i] = A[j];A[j] = temp;}public static void selectionSort(double[] A){int N = A.length;for( int i = 0; i < N; ++i){int min = i;for( int j = i + 1; j < N; ++j){if(compareTo(A[min], A[j]) == 1){min = j;}}exchange(A, i, min);}}public static void main(String[] args){double[] A1 = { 5, 7, 1, 0, 4, 9, 2, 3, 8, 6};selectionSort(A1);System.out.println(Arrays.toString(A1));}}