zoukankan      html  css  js  c++  java
  • 4.2_8种常用排序算法2(插入排序:直接插入排序+希尔排序)

    【插入排序】

    【直接插入排序实例】

    package com.sort.demo2;
    
    import java.util.Arrays;
    
    /**
     * 插入排序
     */
    public class InsertSort {
    
        public static void main(String[] args) {
            int[] arr = new int[]{1,4,5,7,3,9,8,0,2,6};
            System.out.println(Arrays.toString(arr));
            insertSort(arr);
            System.out.println(Arrays.toString(arr));
        }
    
        public static void insertSort(int[] arr) {
            //遍历所有的数字
            for (int i=1;i<arr.length;i++){
                //如果当前数字比前一数字小
                if(arr[i]<arr[i-1]){
                    //把当前遍历的数字存起来
                    int temp = arr[i];
                    int j;
                    for (j=i-1;j>=0&&temp<arr[j];j--){
                        //把前一个数字赋给后一个数字
                        arr[j+1]=arr[j];
                    }
                    //把临时变量(for循环外层的当前元素)赋给不满足条件的后一个元素
                    arr[j+1]=temp;
                }
            }
        }
    }

    【希尔排序】

    【实例】

    package com.sort.demo2;
    
    import java.util.Arrays;
    
    /**
     * 希尔排序
     */
    public class ShellSort {
    
        public static void main(String[] args) {
            int[] arr = new int[]{1,4,5,7,3,9,8,0,2,6};
            System.out.println(Arrays.toString(arr));
            shellSort(arr);
            System.out.println(Arrays.toString(arr));
        }
    
        public static void shellSort(int[] arr) {
            //遍历所有的步长
            for (int d=arr.length/2;d>0;d=d/2){
                //遍历所有元素
                for(int i=d;i<arr.length;i++){
                    //遍历本组中的所有元素
                    for (int j=i-d;j>=0;j=j-d){
                        //如果当前元素>加上步长后的那个元素
                        if(arr[j]>arr[j+d]){
                            int temp=arr[j];
                            arr[j] = arr[j+d];
                            arr[j+d]=temp;
                        }
                    }
                }
            }
        }
    }
  • 相关阅读:
    多线程与Socket编程
    正则表达式
    委托事件泛型
    C#基础加强
    随笔
    不设置JAVA_HOME运行eclipse
    CentOS7.x系统中使用Docker时,在存储方面需要注意的问题
    【转】关于高可用负载均衡的探索-基于Rancher和Traefic
    Rancher 容器管理平台-免费视频培训-链接及内容-第三季
    使用Rancher的RKE快速部署Kubernetes集群
  • 原文地址:https://www.cnblogs.com/HigginCui/p/10596162.html
Copyright © 2011-2022 走看看