前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序算法Java代码实现(三)—— 插入排序 和 希尔排序

排序算法Java代码实现(三)—— 插入排序 和 希尔排序

作者头像
CherishTheYouth
发布2019-08-13 15:12:02
4020
发布2019-08-13 15:12:02
举报
文章被收录于专栏:Vue技术实践

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

本篇内容:

  • 插入排序
  • 希尔排序

(一)插入排序

算法思想:

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

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

代码实现:

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

代码语言:javascript
复制
/**
 * 
 */
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);
        }
    }
}

实现结果:

(二)希尔排序

算法思想:

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

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

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

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

代码语言:javascript
复制
/**
 * 
 */
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);
        }
    }
}

实现结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)插入排序
  • (二)希尔排序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档