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); } }