• Java中的基础排序算法(一):直接插入排序、希尔排序


    参考文章:https://mp.weixin.qq.com/s/VjqZNPg6dAEReAzqZcb_yw

    原文链接:www.jianshu.com/p/5e171281a387

    1.直接插入排序 —— 把新的数据插入到已经排好的数据列中。

    1. 将第一个数和第二个数排序,然后构成一个有序序列

    2. 将第三个数插入进去,构成一个新的有序序列。

    3. 对第四个数、第五个数……直到最后一个数,重复第二步。

    如何写写成代码:

    1. 首先设定插入次数,即循环次数,for( int i = 1 ; i < length ; i ++),1个数的那次不用插入。

    2. 设定插入数和得到已经排好序列的最后一个数的位数。insertNum 和 j = i - 1。

    3. 从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。

    4. 将当前数放置到空着的位置,即 j + 1。

    public void insertSort(int[] a){
            int length=a.length;//数组长度,将这个提取出来是为了提高速度。
            int insertNum;//要插入的数
            for(int i=1;i<length;i++){//插入的次数
                insertNum=a[i];//要插入的数
                int j=i-1;//已经排序好的序列元素个数
                while(j>=0&&a[j]>insertNum){//序列从后到前循环,将大于insertNum的数向后移动一格
                    a[j+1]=a[j];//元素移动一格
                    j--;
                }
                a[j+1]=insertNum;//将需要插入的数放在要插入的位置。
            }
        }

    2.希尔排序 —— 对于直接插入排序问题,数据量巨大时。

    1. 将数的个数设为n,取奇数 k = n / 2,将下标差值为 k 的书分为一组,构成有序序列。

    2. 再取 k = k / 2 ,将下标差值为k的书分为一组,构成有序序列。

    3. 重复第二步,直到 k = 1 执行简单插入排序。

    如何写成代码:

    1. 首先确定分的组数。

    2. 然后对组中元素进行插入排序。

    3. 然后将 length / 2,重复1,2步,直到 length = 0 为止。

    public  void sheelSort(int[] a){
            int d  = a.length;
            while (d!=0) {
                d=d/2;
                for (int x = 0; x < d; x++) {//分的组数
                    for (int i = x + d; i < a.length; i += d) {//组中的元素,从第二个数开始
                        int j = i - d;//j为有序序列最后一位的位数
                        int temp = a[i];//要插入的元素
                        for (; j >= 0 && temp < a[j]; j -= d) {//从后往前遍历。
                            a[j + d] = a[j];//向后移动d位
                        }
                        a[j + d] = temp;
                    }
                }
            }
        }
  • 相关阅读:
    从a文件判断是否删除b文件中的行(sed示例)
    绝对路径的表示方式为什么是"/usr"而不是"//usr"
    判断ssh远程命令是否执行结束
    彻底搞懂shell的高级I/O重定向
    Resource Agent:LSB和OCF
    流程控制语句(MySQL/MariaDB )
    MySQL/MariaDB中游标的使用
    翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)
    从集合的无序性看待关系型数据库中的"序"
    MariaDB/MySQL存储过程和函数
  • 原文地址:https://www.cnblogs.com/lotuses/p/11640461.html
Copyright © 2020-2023  润新知