14- Selection Sort

1. thinking

data n, n-1 for a total cycle times larger to obtain an ordered sequence from small to large are arranged:

  1. 1st [0] ~ arr [n-1] from a selected minimum value arr, with arr [0] exchange
  2. The second [1] ~ arr [n-1] from a selected minimum value arr, with arr [1] exchange
  3. 3rd [2] ~ arr [n-1] from a selected minimum value arr, with arr [2] exchange
  4. The i-th minimum value selected from arr [i-1] ~ arr [n-1], and arr [i-1] exchange
  5. The n-1 times [n-2] ~ arr [n-1] from a selected minimum value arr, with arr [n-2] exchange

2. code implementation

public class SelectSortDemo {
    public static void main(String[] args) {
        // int[] arr = {18, 3, 22, 1, 17, 24, 6, 15};
        // selectSort(arr);
        int arr2[] = new int[80000];
        for(int i = 0; i < 80000; i++)
            arr2[i] = (int) (Math.random() * 800000);
        
        Date date1 = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str1 = sdf.format(date1);
        System.out.println(str1);
        selectSort(arr2); // 测试:8w个数据
        Date date2 = new Date();
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str2 = sdf2.format(date2);
        System.out.println(str2);
    }
    
    public static void selectSort(int[] arr) {
        int minValIndex, temp;
        for(int i = 0; i < arr.length - 1; i++) {
            minValIndex = i;
            for(int j = i+1; j < arr.length; j++)
                if(arr[minValIndex] > arr[j])
                    minValIndex = j;
            if(minValIndex != i) {
                temp = arr[minValIndex];
                arr[minValIndex] = arr[i];
                arr[i] = temp;
            }
            // System.out.printf("第%d趟:%s\n", i+1, Arrays.toString(arr));
        }
    }
    
    public static void detail(int[] arr) {
        // 第1轮
        int minValIndex = 0;
        int temp;
        for(int j = 0 + 1; j < arr.length; j++)
            if(arr[minValIndex] > arr[j])
                minValIndex = j;
        if(minValIndex != 0) {
            temp = arr[minValIndex];
            arr[minValIndex] = arr[0];
            arr[0] = temp;
        }
        System.out.println("第1趟:" + Arrays.toString(arr));
        
        // 第2轮
        minValIndex = 1;
        for(int j = 1 + 1; j < arr.length; j++)
            if(arr[minValIndex] > arr[j])
                minValIndex = j;
        if(minValIndex != 1) {
            temp = arr[minValIndex];
            arr[minValIndex] = arr[1];
            arr[1] = temp;
        }
        System.out.println("第2趟:" + Arrays.toString(arr));
        
        // 第3轮
        minValIndex = 2;
        for(int j = 2 + 1; j < arr.length; j++)
            if(arr[minValIndex] > arr[j])
                minValIndex = j;
        if(minValIndex != 2) {
            temp = arr[minValIndex];
            arr[minValIndex] = arr[2];
            arr[2] = temp;
        }
        System.out.println("第3趟:" + Arrays.toString(arr));
        
        // ... → minValIndex = maxIndex(7) - 1 = 6
    }
}

Guess you like

Origin www.cnblogs.com/liujiaqi1101/p/12327597.html