zoukankan      html  css  js  c++  java
  • 排序算法Java代码实现(三)—— 插入排序 和 希尔排序

    因为希尔排序的核心思想是插入排序,所以本篇将两篇排序一起记录

    本篇内容:

    • 插入排序
    • 希尔排序

    (一)插入排序

    算法思想:

    把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素;

    排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。

    代码实现:

    (注意:ArrayBase在第一篇中已给出代码)

    /**
     * 
     */
    package com.cherish.SortingAlgorithm;
    
    /**
     * @author acer
     *
     */
    public class Chapter_3_插入排序 extends ArrayBase {
    
        /**
         * 
         */
        public Chapter_3_插入排序() {
            // TODO 自动生成的构造函数存根
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            int[] array = new int[] {3,4,7,9,2,5,1,8,6};
            printArray(array);
            insertSorting(array);
            printArray(array);
        }
        
        /*
         * 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素;
         * 排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。
         * */
        public static void insertSorting(int[] array) {
            // TODO 自动生成的方法存根
            int arrayLength = array.length;
            for(int i = 1 ; i < arrayLength ; i++)
            {
                for(int j = i ; j > 0;j--)
                {
                    if(array[j]<array[j-1])
                    {
                        swap(array,j,j-1);
                    }
                    
                }
                printArray(array);
            }
        }
    }

    实现结果:

    (二)希尔排序

     算法思想:

    希尔排序的实质就是分组插入排序,又称缩小增量法;

    将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,

    然后依次缩减增量再进行排序,待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序。

    因为直接插入排序在元素基本有序的情况下,效率是很高的,因此希尔排序在时间效率上有很大提高

    /**
     * 
     */
    package com.cherish.SortingAlgorithm;
    
    /**
     * @author acer
     *
     */
    public class Chapter_4_希尔排序 extends ArrayBase {
    
        /**
         * 
         */
        public Chapter_4_希尔排序() {
            // TODO 自动生成的构造函数存根
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            int[] array = new int[] {3,4,7,9,2,5,1,8,6};
            printArray(array);
            shellSorting(array);
            printArray(array);        
        }
        
        
        /*
         * 希尔排序的实质就是分组插入排序,又称缩小增量法
         * 将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,
         * 然后依次缩减增量再进行排序,待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序。
         * 因为直接插入排序在元素基本有序的情况下,效率是很高的,因此希尔排序在时间效率上有很大提高
         * */
        public static void shellSorting(int[] array)
        {
            int arrayLength = array.length;//数组长度
            int gap = arrayLength/2;//子序列数
            while(gap>=1)
            {
                for(int i = gap;i < arrayLength;i++)
                {
                //    int j=i-gap;
                    for(int j = i-gap;j>=0;j--)
                    {
                        if(array[j]>array[i])
                        {
                            swap(array,j,i);
                        }    
                    }                            
                }
                gap = gap/2;
                printArray(array);
            }
        }
    }

    实现结果:

  • 相关阅读:
    dom4j
    javase的一些基础(4)
    javase的一些基础(3)
    javase的一些基础(2)
    javase的一些基础(1)
    不要在乎形式
    世界观--我对这个世界的理解
    feign.FeignException: status 400 reading xxx 异常
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean
    SpringBoot整合Junit测试时要注意@SpringBootTest注解需指明启动类
  • 原文地址:https://www.cnblogs.com/CherishTheYouth/p/CherishTheYouth_2019_0811_insertAndShell.html
Copyright © 2011-2022 走看看