首页 > 编程语言 >java算法学习——选择排序算法

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

时间:2022-09-28 10:01:59浏览次数:56  
标签:arr 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);

    }

}

 

标签:arr,java,复杂度,关键字,算法,排序
From: https://www.cnblogs.com/yuezhihao/p/16736944.html

相关文章

  • java类加载器?
    Java类加载器ClassLoader总结JAVA类装载方式,有两种:1.隐式装载,程序在运行过程中当碰到通过new等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。2.显式装载,通过cla......
  • 19. 排序和搜索功能
    1.前言NumPy提供了多种排序函数,这些排序函数可以实现不同的排序算法。排序算法特征主要体现在以下四个方面:执行速度,最坏情况下的复杂度,所需的工作空间以及算法的稳定性......
  • 狂神说Java流程控制
    用户交互Scannerscanner对象之前我们学的基本语法中并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的......
  • 记一次使用spring javaconfig踩到的坑
    前言为了简化开发,我部门经常会封装一些通用的类库给业务研发使用,因为业务方的根包路径很经常和我们部门项目的根包是不一样的,因此我们会让业务方在使用我们封装的包时,扫描......
  • 算法 玩转数据结构 2-5 包含,搜索和删除
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13410 1重点关注1.1continue,break,return的区别for循环中,continue结束本轮循环,b......
  • Java线程同步的四种方式详解(建议收藏)
    ​ Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式@mikechen目录什么是线程同步线程同步的几种方式......
  • 尚硅谷-JavaWeb CSS
    1.CSS:层叠样式表单,用于(增强)控制网页样式并允许将样式信息域网页内容分离的一种标记性语言;2.CSS和HTML的组合方式:第一种:在标签的style属性上设置"key:valuevalue",......
  • JAVA丑数
    leetcode题目链接有些数的素因子只有3,5,7,请设计一个算法找出第k个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是1,3,5,7,9,15,21。......
  • 算法练习-第六天【哈希表】
    哈希表(二)454.四数相加II参考:代码随想录454.四数相加思路题目中给出了四个长度相同数组,并且要求求出组成结果为0的四元组。答案可以包含重复的四元组。先使用哈希表......
  • 【设计模式】Java设计模式 - 命令模式
    Java设计模式-命令模式......