排序算法总结

一、分类总结

在这里插入图片描述
插入排序:都要求是在已经有序的序列中,插入新的元素,直到所有的元素插入完成。
选择排序:选择一个满足条件的放入有序队列,再遍历剩下的无序列表继续选择,直到所有数据有序。
交换排序:每次保证一个有序数到达相应位置
二路归并:在保证“二路”有序的基础上进行归并
基数排序:

二、部分算法代码实现(以升序排序为例)

一、插入排序
(一)直接插入排序
思想:从初始位置遍历数组,每一次遍历都想一个关键字按照其数值的大小插入到“已经排好的、部分有序”序列的适当位置,直到所有待排关键字都被插入到有序序列中为止。
稳定性:稳定的
时间复杂度:O(n^2)

public static void ZJinsertSort(int[] nums){
   
        System.out.print("before sort:");
        for (int i=0;i<nums.length;i++){
   
            System.out.print(nums[i]+" ");
        }
        for(int i=1; i<nums.length;i++){
   
            int temp = nums[i];
            int j = i-1;
            //while里面必须用temp,因为nums[i]会因为nums[j]的移动而发生变化
            while(j>=0&&temp<nums[j]){
   
                nums[j+1] = nums[j];
                --j;
            }
            nums[j+1] = temp;
        }
        System.out.print("\nafter sort:");
        for (int i=0;i<nums.length;i++){
   
            System.out.print(nums[i]+" ");
        }
    }

before sort:51 35 60 88 76 9 17 51
after sort:9 17 35 51 51 60 76 88

(二)折半插入排序
思想:从头开始遍历,i为当前要插入的元素。对下标i对应的元素在0-i的有序序列中进行折半查找,找到要插入的数据的位置index,将i-1到index的元素后移,在index的位置插入i对应的值。
稳定性:稳定的
时间复杂度:O(n^2)
下面代码偷懒了…没有按照思路来,利用了java中ArrayList中的动态插入性质插入一个元素。

public static void ZBsrot(List<Integer> nums, int insertnum){
   
            int index = ZBserach(nums,insertnum);
            //java的ArrayList中add(int,Object)方法自动向后顺延,不会覆盖
            nums.add(index,insertnum);
        }
    //查找插入位置
    public static int ZBser
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值