Java 八大排序算法 总结 (完整代码可直接运行)

0.算法复杂度比较

在这里插入图片描述

1.直接插入排序

插入排序(Insertion Sort) 是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

class Insert {
   
   
    public static int[] insert(int[] arr) {
   
   
        int length = arr.length;
        for (int i=0; i<arr.length; i++) {
   
   
            int tmp = arr[i];
            int j;//j从当前的i开始向前遍历
            for (j=i; j>0 && arr[j-1]>tmp; j--) {
   
   //i是当前值,如果arr[j-1]比当前值大,arr[j-1]就要向后移一位。
                arr[j] = arr[j-1];
            }
            arr[j] = tmp;//当前的j就是应该插入的位置;
        }
        return arr;
    }
    public static void main(String[] args){
   
   
        int[] arr = new int[]{
   
   3,6,8,4,5,7,11};
        arr = insert(arr);
        System.out.println(Arrays.toString(arr));
    }    
}

参考:
https://blog.csdn.net/qq_28081081/article/details/80594386

2.Shell排序

希尔排序(Shell Sort) 也叫做缩小增量排序,是插入排序的改进版本。 它通过先设置一个增量n,大小为数组长度的一半,将间隔为n的元素视作一个组,然后对每个组内部的元素进行从小到大进行插入排序;然后再将增量n缩小一半,再次进行分组插入排序,直到增量n为1,因为增量为1的时候,所有的元素都为同一个组了。

class Shell{
   
   
    public static int[] shellSort(int[] arr){
   
   
        // 1. 获取数组长度
        int length = arr.length;
        // 2.获取初始的间隔长度
        int interval = (int)Math.floor(length/2.0);
        // 3. 不断地缩小间隔的大小,进行分组插入排序
        while (interval>=1) {
   
   
            // 4. 从 arr[interval] 开始往后遍历,将遍历到的数据与其小组进行插入排序
            for (int i=interval;i<length;i++) {
   
   
                int tmp = arr[i];//tmp后值
                int j = i;
                while (j-interval>=0 && arr[j-interval]>tmp){
   
   //前值比后值大的情况
                    arr[j] = arr[j-interval];//后值用前值代替
                    j = j-interval;
                }
                arr[j] = tmp;
            }
            // 5. 缩小间隔
            interval = (int)Math.floor(interval/2.0);
        }
        return arr;
    }
    public static void main(String[] args){
   
   
        int[] arr = new int[]{
   
   3,6,8,4,5,7,11,3,3,3,3,2,1};
        arr = shellSort(arr);
        System.out.println(Arrays.toString(arr));
    }
    
}

参考:https://blog.csdn.net/l_ppp/article/details/108855298?utm_medium=distribute.pc_feed.none-task-blog-vip_agree_hot-1.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-vip_agree_hot-1.nonecase

3.直接选择排序

选择排序(Selection sort) 是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,所以称为选择排序。
设第一个元素为比较元素,依次和后面的元素比较,比较完所有元素找到最小的元素,将它和第一个元素互换。重复上述操作,我们找出第二小的元素和第二个位置的元素互换,以此类推找出剩余最小元素将它换到前面,即完成排序。

class Select {
   
   
    public static int[] select_sort(int[] arr) {
   
   
        //第一层for表示循环选择的遍数
        int length = arr.length;
        for (int i=0; i<length-1; i++) {
   
   
            int iMin = i;//将起始元素设为最小元素
            // 第二层for表示最小元素和后面的元素逐个比较
            for (int j=i+1; j<length; j++) {
   
   
                if (arr[j] < arr[iMin]){
   
   
                    //如果当前元素比最小元素小,则把当前元素角标记为最小元素角标
                    iMin = j;
                }
            }
            // 查找一遍后将最小元素与起始元素互换
            if (iMin!=i){
   
   
                int tmp = arr[iMin];
                arr[iMin] = arr[i];
                arr[i] = tmp;
            }
        }
        return arr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值