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

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;
                }
            }
        }
    }
相关推荐
业精于勤的牙3 小时前
浅谈:算法中的斐波那契数(二)
算法·职场和发展
陈文锦丫3 小时前
MQ的学习
java·开发语言
乌暮3 小时前
JavaEE初阶---线程安全问题
java·java-ee
爱笑的眼睛113 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
不穿格子的程序员3 小时前
从零开始写算法——链表篇4:删除链表的倒数第 N 个结点 + 两两交换链表中的节点
数据结构·算法·链表
liuyao_xianhui3 小时前
寻找峰值--优选算法(二分查找法)
算法
dragoooon343 小时前
[hot100 NO.19~24]
数据结构·算法
Seven974 小时前
剑指offer-52、正则表达式匹配
java
代码or搬砖4 小时前
RBAC(权限认证)小例子
java·数据库·spring boot
青蛙大侠公主4 小时前
Thread及其相关类
java·开发语言