数据结构中常见的排序算法

目录

稳定性概念

1.插入排序

2.希尔排序

3.选择排序

4.堆排序

5.冒泡排序

6.快速排序

7.归并排序

稳定性概念

简单的说就是俩个相等的数据,经过排序后,排序算法能保证其相对位置不变。

(插入排序,冒泡排序,归并排序都是稳定的)

1.插入排序

特点:数组短,排序效率高;数组相对有序,排序效率也高;

时间复杂度:O(N*2)

空间复杂度:O(1)

稳定

代码:

    public static void insertSort(int[] arr){
        int bound=1;
        //[0,bound)已排序区间
        //[bound,length)待排序区间
        for (;bound<arr.length;bound++){
            //里面每次要执行具体的比较插入过程了
            //取出待排序区间的最开始元素
            int v=arr[bound];
            int cur=bound-1;
            for (;cur>=0;cur--){
                //这个循环就是在执行比较插入的细节
                //拿着 v 这个值依次往前进行比较,找到合适位置
                if (arr[cur]>v){
                    //说明v应该插入到arr[cur]之前
                    //于是就得把cur位置的元素往后搬运一个格子
                    arr[cur+1]=arr[cur];
                }else{
                    //说明已经找到了合适的位置,结束循环
                    //所谓的合适位置就是cur+1这个下标
                    break;
                }
            }
            arr[cur+1]=v;
        }
    }

2.希尔排序

建立在插入排序的基础上,代码相似于插入排序,其实就是将数组进行分组插排

时间复杂度:O(N*2)

空间复杂度:O(1)

不稳定

代码:

    private static void _shellSort(int[] arr, int gap) {
        //进行分组插排,分组依据就是gap
        //gap也表示分的组数
        //同组的相邻元素,下标差值就是gap
        //下面的代码和插入排序是一样的
        int bound = gap;
        for (; bound < arr.length; bound++) {
            int v = arr[bound];
            int cur = bound - gap;
            for (; cur >= 0; cur -= gap) {
                //进行搬运
                if (arr[cur] > v) {
                    arr[cur + gap] = arr[cur];
                } else {
                    break;
                }
            }
            arr[cur+gap]=v;
        }
    }

3.选择排序

①分成已排区间(空)和待排序区间;

②从0号元素开始依次跟后边元素比较,若0号大,换位置,若0号小,一直往后比

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值