zoukankan      html  css  js  c++  java
  • 算法学习:直接插入排序

    1、插入排序核心思想

      插入排序的核心思想是将数组中所有的元素和前面已经排序好的元素相比较。

      如果后面选择的元素比排序的元素小,则交换位置,直到比较完成。

    2、插入排序过程举例

      arr = [1,22,-1,9,23,5]
      思路,将一个数字插入到有序部分,对比;找到插入位置;插入。
      
      1)将数组分成两部分
        -有序部分 [1]
        -无序部分 [22,-1,9,23,5]
      2)取无序部分的第一个元素插入到有序部分去
        -有序部分 [1,22]
        -无序部分 [-1,9,23,5]
      3)重复步骤2
        -有序部分 [-1,1,22]
        -无序部分 [9,23,5]
      4)重复步骤2
        -有序部分 [-1,1,9,22]
        -无序部分 [23,5]
      5)重复步骤2
        -有序部分 [-1,1,9,22,23]
        -无序部分 [5]
      6)重复步骤2
        -有序部分 [-1,1,5,9,22,23]
        -无序部分 []
     
    3、代码
    #方法1,从后往前,逐个比较
    def insertSort(arr):
        for i in range(1,len(arr)):#若有n个元素,n-1个数需要比较
            for j in range(i,0,-1):#从第i个元素开始,从后往前比较(实际从索引1开始比)
                if arr[j]<arr[j-1]:#如果比前一个数小,交换位置
                    arr[j],arr[j-1]=arr[j-1],arr[j]
                else:#否则结束此次循环
                    break
        return arr
    
    print(insertSort([1,22,-1,9,23,5])) #[-1, 1, 5, 9, 22, 23]

    时间复杂度:O(n^2)

    #方法2:
    def insertSort02(arr):
        i = 1
        while i<len(arr):#若有n个数字,比较n-1次
            j = i #从索引为1的元素开始比较
            while j>=1:
                if arr[j]<arr[j-1]:#若当前元素比前一个元素小,交换位置
                    arr[j],arr[j-1]=arr[j-1],arr[j]
                    j-=1 #接下来比较前一个元素
                else:
                    break
            i+=1#继续比较下一轮
        return arr
    print(insertSort02([1,22,-1,9,23,5])) #[-1, 1, 5, 9, 22, 23]

  • 相关阅读:
    斯托克斯定理(Stokes' theorem)
    记号的认识、公式的理解
    记号的认识、公式的理解
    Python 金融数据分析 (一)—— 股票数据
    Python 金融数据分析 (一)—— 股票数据
    开源项目
    开源项目
    感知机模型及其对偶形式
    感知机模型及其对偶形式
    jni编译non-numeric second argument to `wordlist' function错误
  • 原文地址:https://www.cnblogs.com/hqq2019-10/p/13933334.html
Copyright © 2011-2022 走看看