算法入门----排序(选择,冒泡,插排)

1.选择排序

每次从第 i 个开始和它右边每一个比较大小,从i+1一直比到第length-1个,排好的放最左侧,所以 i 每次+1,循环length-1次, i 从0 到 length-2

java 复制代码
 /**
     * 选择排序算法
     * @param arr 待排序的整型数组
     */
    //一句话概括: 选择排序 i++~n-1
    //在i~n-1中选出最小的放在i位置上,然后i+1~n-1范围上继续.
    public static void selectionSort(int [] arr){
        if(arr == null || arr.length <2 ){  //null数组,其 length 属性会导致 NullPointerException。
            return;
        }
        int min=0;//最小值索引
        for(int i=0;i<arr.length-1;i++){
            min=i;
            for(int j=i+1;j<arr.length;j++){//选出最小
                if(arr[min]>arr[j]){
                    min=j;
                }
            }
            int temp=arr[min];//交换
            arr[min]=arr[i];
            arr[i]=temp;
        }
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }

2.冒泡排序

每次从 i 开始和 i+1比较, i 向右移动,排好的放右边,所以 i+1每次-1,循环length-1次

java 复制代码
//一句话概括: 冒泡排序 i~n--
    //0~i范围上,相邻位置选出较大数,最大值最终来到i位置,然后0~i-1范围上继续
        public static void bubbleSort(int []arr ){
        if(arr ==null || arr.length<2 ){
            return;
        }
        for(int end=arr.length-1;end>0;end--){//length-1~1
            for(int i=0;i<end;i++){
                if(arr[i]>arr[i+1]){
                    int temp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=temp;
                }
            }
        }
    }

3.插入排序

每次从 j+1(=i) 开始与左侧相邻位置比较, j 左移并与左邻比较 i 次,排好的放左边,循环 length-1次.

java 复制代码
//插入排序一句话,0~i-1范围上已经有序,新来的数从右往左滑倒不再小的位置插入,然后继续
    public static void insertSort (int [] arr){
        if(arr == null || arr.length<2){
            return;
        }
        for(int i=1;i<arr.length;i++){
            for(int j=i-1;j>=0;j--){
                if(arr[j+1]<arr[j]){
                    int t=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=t;
                }
            }
        }
    }
相关推荐
哈哈很哈哈9 分钟前
Flink SlotSharingGroup 机制详解
java·大数据·flink
真的想不出名儿19 分钟前
springboot - 邮箱验证码登录
java·springboot·邮箱验证
杨小码不BUG30 分钟前
CSP-J/S初赛知识点精讲-图论
c++·算法·图论··编码·csp-j/s初赛
the beard37 分钟前
JVM垃圾回收器深度解析:从Serial到G1,探索垃圾回收的艺术
java·jvm
大虾别跑38 分钟前
vc无法启动
java·开发语言
郭老二43 分钟前
【JAVA】从入门到放弃-01-HelloWorld
java·开发语言
卷Java1 小时前
CSS模板语法修复总结
java·前端·css·数据库·微信小程序·uni-app·springboot
龙茶清欢1 小时前
7、revision 是 Maven 3.5+ 引入的现代版本管理机制
java·elasticsearch·maven
柯南二号1 小时前
【Java后端】《Spring Boot Starter 原理详解》博客
java·开发语言·spring boot
歪歪1001 小时前
如何在SQLite中实现事务处理?
java·开发语言·jvm·数据库·sql·sqlite