選擇排序

選擇排序

package com.zgz;

/**
 * 選擇排序
 * @author guozhenZhao
 * @date 2019年3月31日
 */
public class SelectionSort {

    public static void main(String[] args) {
        int[] arr = {2,3,6,5,4,1,8,9,5,0};
        sort(arr);
        print(arr);
    }

    static void sort(int[] arr) {
        //每次遍歷同時找到最大值和最小值所在的位置
        for(int i=0; i<arr.length/2; i++) {
            //記錄最大值和最小值的位置
            int minPos = i;
            int maxPos = i;
            //更新最大值和最小值的位置
            for(int j=i+1; j<=arr.length-1-i; j++) {//每完成一輪減小兩個元素, 注意有等號
                if(arr[minPos]>arr[j]) {
                    minPos = j;
                    //找到最小值跳出這次循環
                    continue;
                }else if(arr[maxPos]<arr[j]) {
                    maxPos = j;
                }
            }
            //判斷位置
            if(minPos!=i) {
                swap(arr, i, minPos);
                //進行了交換,原先元素的位置已經發生了變化
                if(maxPos==i) {
                    maxPos=minPos;
                }
            }
            if(maxPos!=arr.length-1-i) {//若是最大值的位置不等於最後一個元素則交換
                swap(arr, arr.length-1-i, maxPos);
            }
        }
    }

    static void swap(int[] arr, int i, int j) {
        int temp = arr[j];
        arr[j] = arr[i];
        arr[i]= temp;
    }

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

}

對數器

package com.zgz;

import java.util.Arrays;
import java.util.Random;

/**
 * 對數器
 * @author guozhenZhao
 * @date 2019年4月1日
 */
public class DataChecker {

    static int[] generateRandomArray() {
        Random random = new Random();

        int[] arr = new int[100];
        for(int i=0; i<100; i++) {
            arr[i]=random.nextInt(100);
        }

        return arr;
    }

    static void check() {
        int[] arr = generateRandomArray();
        int[] arr1 = new int[arr.length];
        System.arraycopy(arr, 0, arr1, 0, arr.length);

        Arrays.sort(arr);
        SelectionSort.sort(arr1);

        boolean flag = true;
        for(int i=0; i<arr1.length; i++) {
            if(arr[i] != arr1[i]) {
                flag = false;
            }
        }

        System.out.println(flag);

    }

    public static void main(String[] args) {
        check();
    }

}
相關文章
相關標籤/搜索