java算法学习——选择排序算法

研究生生活开始后,充分认识到算法的重要性,开始重拾java算法——视频参照 哔哩哔哩左神——https://www.bilibili.com/video/BV13g41157hK/?p=4&spm_id_from=333.880.my_history.page.click&vd_source=11356557538257f0e68f2c60ca190b0b

选择排序算法:算法思路(以从小到大为例),所有关键字中进行比较找出最小的一个关键字,和待排序列中第一个位置上的关键字进行交换,执行N轮即可完成排序

算法分析:时间复杂度上,由于每一轮都需要待排序列中所有的关键字参与比较,并且执行N轮,因此在时间复杂度上简单选择排序比较次数是按照等差数列N、N-1.....1来执行的,所有时间复杂度最终为O(N^2);

package class01;

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

//时间复杂度O(n^2)
public class Code01_SelectSort {
    public static void selectionSort(int[] arr){
        if(arr==null||arr.length<2){
            return;
        }
        for(int i=0;i<arr.length;i++){
            int minindex=i;
            for(int j=i;j<arr.length;j++){
                minindex= arr[j]<arr[minindex]?j:minindex;
            }
            swap(arr,i,minindex);
        }
    }
    public static void comparator(int[] arr){
        Arrays.sort(arr);
    }//对数器用于验证排序结果是否正确
    public static void swap(int[] arr,int i,int j){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }//交换
    public static int[] generateRandomArray(int maxSize, int maxValue) {
        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 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 boolean isEqual(int[] arr1, int[] arr2) {
        for(int i=0;i<arr1.length;i++){
            if(arr1[i]!=arr2[i])
                return false;
        }
        return true;
    }
    public static void main(String[] args) {
        int testtime=5000;
        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;
                break;
            }
        }
        System.out.println(succeed?"Nice!" :"xxxxx");
        int arr[] =generateRandomArray(maxsize,maxvalue);

    }

}

 

posted on 2022-09-28 09:51  发酸的土豆  阅读(21)  评论(0编辑  收藏  举报