【插入排序】:直接插入排序、二分插入排序、shell排序

【插入排序】:直接插入排序、二分插入排序、shell排序

  • [1. 直接插入排序](#1. 直接插入排序)
    • [1.1 详细过程](#1.1 详细过程)
    • [1.2 代码实现](#1.2 代码实现)
  • [2. 二分插入排序](#2. 二分插入排序)
    • [2.1 详细过程](#2.1 详细过程)
    • [2.2 代码实现](#2.2 代码实现)
  • [3. shell排序](#3. shell排序)
    • [3.1 详细过程](#3.1 详细过程)
    • [3.2 代码实现](#3.2 代码实现)

1. 直接插入排序

1.1 详细过程

1.2 代码实现

java 复制代码
public static void swap(int[]arr,int a,int b){
        int tmp=arr[a];
        arr[a]=arr[b];
        arr[b]=tmp;
    }
    public static void sort(int[] arr,int left,int right){
        if(right>=arr.length) return;
        if(left>=right) return;
        if(arr[left]>arr[left+1]){
            swap(arr,left,left+1);
            sort(arr,0,left);
        }
        left++;
        sort(arr,left,right);
    }

    public static void main(String[] args) {
        int[] arr=new int[]{1,5,7,21,2,6,93,8};
        sort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

2. 二分插入排序

2.1 详细过程

2.2 代码实现

java 复制代码
  public static int search(int[] arr, int left, int right, int key) {
        if (left > right) {
            // 没有找到key,返回应该插入的位置
            return left;
        }
        int mid = (left + right) / 2;
        if (arr[mid] == key) {
            return mid;
        }
        if (arr[mid] > key) {
            return search(arr, left, mid - 1, key);
        } else {
            return search(arr, mid + 1, right, key);
        }
    }

    public static void sort(int[]arr){
        //遍历比较
        for (int i = 1; i < arr.length; i++) {
            if(arr[i]<arr[i-1]){
                //进入二分查找
                int pos=search(arr,0,i-1,arr[i]);
                //目标位置集体往后移
                int tmp=arr[i];
                for(int j=i-1;j>=pos;j--){
                    arr[j+1]=arr[j];
                }
                //插入
                arr[pos]=tmp;
            }
            System.out.println("第"+i+"次: "+Arrays.toString(arr));
        }
    }

    public static void main(String[] args) {
        int[] arr=new int[]{1,56,88,66,35,2,8};
        sort(arr);
    }

3. shell排序

3.1 详细过程

3.2 代码实现

java 复制代码
    public static void sort(int[] arr){
        int gap=arr.length/2;
        //开始遍历
        int j=1;
        do{
            for(int i=0;i<arr.length-gap;i++){
[video(video-SY1ydW46-1732779457803)(type-csdn)(url-https://live.csdn.net/v/embed/436204)(image-https://v-blog.csdnimg.cn/asset/26566b09687ce9bdc33dff17e9c146c4/cover/Cover0.jpg)(title-二分插入排序1)]

                if(arr[i]>arr[i+gap]){
                    //交换
                    int tmp=arr[i];
                    arr[i]=arr[i+gap];
                    arr[i+gap]=tmp;
                }
            }
            gap/=2;
            System.out.println("第"+j+++"次: "+Arrays.toString(arr));
        }while(gap>=1);
    }
    public static void main(String[] args) {
        int[] arr=new int[]{1,56,88,66,35,2,8};
        sort(arr);
    }
相关推荐
优秀的颜31 分钟前
计算机基础知识(第五篇)
java·开发语言·分布式
BillKu32 分钟前
Java严格模式withResolverStyle解析日期错误及解决方案
java
飞川撸码34 分钟前
【LeetCode 热题100】网格路径类 DP 系列题:不同路径 & 最小路径和(力扣62 / 64 )(Go语言版)
算法·leetcode·golang·动态规划
网安INF37 分钟前
ElGamal加密算法:离散对数难题的安全基石
java·网络安全·密码学
Neil今天也要学习39 分钟前
永磁同步电机参数辨识算法--IPMSM拓展卡尔曼滤波全参数辨识
单片机·嵌入式硬件·算法
yzx9910132 小时前
基于 Q-Learning 算法和 CNN 的强化学习实现方案
人工智能·算法·cnn
AWS官方合作商2 小时前
在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署
java·云原生·aws
亮亮爱刷题2 小时前
算法练习-回溯
算法
gadiaola3 小时前
【JVM】Java虚拟机(二)——垃圾回收
java·jvm
眼镜哥(with glasses)3 小时前
蓝桥杯 国赛2024python(b组)题目(1-3)
数据结构·算法·蓝桥杯