码迷,mamicode.com
首页 > 编程语言 > 详细

选择排序+对数器

时间:2020-04-25 13:04:40      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:maxsize   ack   swa   nic   void   ati   array   div   selection   

package arithmetic;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * @author hailu
 */
public class SelectionSort {

    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        /*
         * 0 ~ n-1
         * 1 ~ n-1
         * 2 ~ n-1
         * ...~ n-1
         * */
        // i ~ N-1
        for (int i = 0; i < arr.length - 1; i++) {
            // 最小值在哪个位置上  i~n-1
            int minIndex = i;
            // i ~ N-1 上找最小值的下标
            for (int j = i + 1; j < arr.length; j++) {
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            swap(arr, i, minIndex);
        }
    }

    public static void main(String[] args) {
//        int[] arr = new int[]{5, 3, 4, 1, 2};
//        selectionSort(arr);
//        printArray(arr);

        int testTime=500000;
        int maxSize=100;
        int maxValue=100;
        boolean succeed=true;
        for (int i=0;i<testTime;i++){
            int[] arr1 = generateRandomArray(maxSize, maxValue);
            int[] arr2 = copyArray(arr1);
            selectionSort(arr1);
            comparator(arr2);
            if (!isEqual(arr1,arr2)){
                succeed=false;
                printArray(arr1);
                printArray(arr2);
                break;
            }
        }

        System.out.println(succeed ? "Nice!" : "Fucking fucked!");

        int[] arr = generateRandomArray(maxSize, maxValue);
        printArray(arr);
        selectionSort(arr);
        printArray(arr);
    }

    public static boolean isEqual(int[]arr1,int[] arr2){
        if ((arr1==null&&arr2!=null)||(arr1!=null&&arr2==null)){
            return false;
        }
        if (arr1==null&&arr2==null){
            return true;
        }
        for(int i=0;i<arr1.length;i++){
            if (arr1[i] != arr2[i]) {
                return false;
            }
        }
        return true;
    }

    public static int[] generateRandomArray(int maxSize,int maxValue){
        /*
        * Math.random()    [0,1)
        * Math.random()*N    [0,N)
        * (int)(Math.random()*N)    [0,N-1]
        * */
        int[] arr=new int[(int)((maxSize+1)*Math.random())];
        for (int i=0;i<arr.length;i++){
            // [-? , +?]
            arr[i]=(int)((maxValue+1)*Math.random())-(int)(maxValue*Math.random());
        }
        return arr;
    }

    public static void comparator(int[]arr){
        Arrays.sort(arr);
    }

    public static int[] copyArray(int[]arr){
        if (arr==null){
            return null;
        }
        int[]res=new int[arr.length];
        for (int i=0;i<arr.length;i++){
            res[i]=arr[i];
        }
        return res;
    }

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

    public static void printArray(int[] arr) {
        if (arr == null) {
            return;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "  ");
        }
        System.out.println();
    }
}

 

选择排序+对数器

标签:maxsize   ack   swa   nic   void   ati   array   div   selection   

原文地址:https://www.cnblogs.com/yanghailu/p/12772148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!