zoukankan      html  css  js  c++  java
  • 插入排序总结(来自算法导论)

      自己总结的!什么是插入 排序 ,一直 感觉非常的 含糊不清。

    下面 来做一个简单的总结,我因为不会 画图 ,所以用文字来进行总结,

    如果有一个 未排序的数组,如果这个数组是 :0,22,11,55,2

    那么 我们 怎么 来 进行排序呢,如果是使用 插入 排序。

    首先 我们 要 构造一个循环,这个循环是从2~LENGTH。

    为什么是从2开始,而不是从1开始呢?

    因为第一个元素无论如何是不需要 排序的,所以可以从2开始 进行排序。

    当我们第一次排序的时候,那么 肯定是把第二个元素和第一个元素进行比较。

    这次是进行 从小 到大的排序,好,我们 开始进行排序,第一次把第二个元素和第一个 元素 进行比较,

    由于这“第二个”元素可以是第N个元素,所以 我们有必要记录一下下标,我们把这个第N个元素的下标放到临时 变量 里面。

    然后我们 开始从第N-1个元素进行比较,我们必须去移动1~N-1个元素的位置,当然是向后移动,

    如果 元素这个第N个元素的值和 前面的值比较,如果 N-1(N是 变量)的值大于记录的值,那么我们先做的一件事 就是

    把变量中的前一个元素的值赋给后一个,然后 下标减一,这样 就实现了元素后移,当然最大的后移下标是这次外层循环的下标 。

    然后如果都KEY小于下标的值,那么循环结束,找到了和下标匹配的最大元素的值。

    然后把KEY值赋给这个下标的后一位值(这里还是不太明白 ),为什么这样呢?

    因为 外层循环其实是从第一项 开始的,而这里的里层循环是从0开始的!所以我们最多只能把这个值赋给第一项,而不是第0项!

    照这个思路理解,其实我们是给第1项到 第N项进行了排序!不知道 我理解得对不对!

    然后其他的就 依次类推 了 吧。

  • 相关阅读:
    2、从0开始学算法 时间/空间复杂度(如何知道你的代码性能如何?)
    1、从0开始学算法 概述
    机器学习(五):通俗易懂决策树与随机森林及代码实践
    机器学习(四):通俗理解支持向量机SVM及代码实践
    机器学习(三):理解逻辑回归及二分类、多分类代码实践
    HDU 2492 Ping pong (树状数组)
    yum更新失败
    webpack3配置rules的问题
    置顶帖汇总
    2021.07.03软件更新公告
  • 原文地址:https://www.cnblogs.com/kmsfan/p/4765907.html
Copyright © 2011-2022 走看看