zoukankan      html  css  js  c++  java
  • 8种排序算法--直接插入排序

    直接插入排序。

    我的想法是:首先将序列想成是有序的,然后依次往后追加数让他成为大数列。如果追加的数使该序列无序,就将这个数进行插入到前面有序的序列中。直到全部追加完毕就排序完毕了。

    现在有这么一个序列:

    6  7  4 3  9  1 2  3 

    第1次:比较是从第二开始的,如果前面的数比后面的数大就将两个数重新排,结果没有。

    第2次: 

    4  6 7  3 9  1  2 3   而4比前面的数小,说明第三位开始乱了,所以4要和7比较。如果比他小就往前排,接着和6比,如果比6小就继续往前排 这样前面3个数就有序了。  

    第3次:

    3  4 6  7  9  1 2  3    依次这么搞

    第4次:             搞完以后发现3,4,,6,7,9有序就往后比较

    第5次:

    1  3 4  6  7  9 2  3 

    第6次:

    1  2 3  4  6 7  9  3 

    第7次:

    1  2 3  3  4 6  7  9 

     

    下面请看实现代码:

    packagecom.fish.sort;

     

    public class InsertSort {

        public static void main(String[] args) {

            // 将九个数进行排序

            int[] array = { 6, 7, 4, 3, 9, 1, 2, 3 };

     

            myResult(array);

            for (int i = 0; i < array.length; i++) {

                System.out.print(array[i] + " ");

            }

     

        }

     

        public static void myResult(int[] array) {

            for (int i = 1; i < array.length; i++) {

                int session = array[i];// 先将这个数放入缓存

                if (array[i] < array[i - 1]) { // 如果这个数比前面的数小说明这个数开始乱了。所以我们要重新排序

                    int j = i - 1;

                    while (j >= 0 && array[j] > session){// 那就将这个数和他前面的各个数比较

                        array[j + 1] = array[j]; // 因为比完一个要有一个位置,所以先依次往后移然后将这个数插入到适合自己的位置上

                        j--;

                    }

                    array[j + 1] = session;

                }

            }

     

        }

    }

     

    插入排序其实代码量比较少,思维比较多。想通了很简单。

    插入排序:如果本身数据多半有序实现就非常快。如果全部无序就比较坑爹。

    这种算法时间复杂度:n^2 空间复杂度 1 是稳定性排序。

  • 相关阅读:
    回归模型与房价预测
    朴素贝叶斯应用:垃圾邮件分类
    sklearn中的朴素贝叶斯模型及其应用
    朴素贝叶斯
    KMEAMS算法应用:图片压缩与贝叶斯公式理解
    第九周 课堂
    numpy数组及处理:效率对比
    完整的中英文词频统计
    杜-----------前期作业小笔记
    django_apscheduler 0.4.0删除了name字段
  • 原文地址:https://www.cnblogs.com/riskyer/p/3278031.html
Copyright © 2011-2022 走看看