zoukankan      html  css  js  c++  java
  • 常见算法之‘插入类排序’

    插入类排序:

      每步将一个待排序的记录,按其排序码大小,插到前面已经排序的文件中的适当位置,直到全部插完为止。

    1.直接插入排序

      1.算法思想:从待排序的第n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。

      2.代码:  

    def insert_sort(array):
        n=len(array)
        for i in range(1,n):
            if array[i]<array[i-1]:
                temp=array[i]
                index=i        #待插入的下标
                for j in range (i-1,-1,-1):    #从i-1循环到0
                    if array[j]>temp:
                        array[j+1]=array[j]
                        index[j]        #记录待插入下标
                    else:
                        break
                array[index]=temp
        return array
    

    2.shell排序(希尔排序):

      1.原理:是对相邻指定距离(称为增量)的元素进行比较,并不断把增量缩小至1,完成排序。

         shell排序时,开始时增量比较大,分组较多,每组的记录数目较少,用此,在各组内采用直接插入排序较快,后来增量di逐渐缩小,分组数减少,各组的记录数增多,

         但由于按(di-1)分组排序,文件较接近于有序状态,所以新的一趟排序过程较快,因此shell排序在效率上比直接插入排序有较大的改进。

      2.代码:   

    def shellsort(nums):
        step=len(nums)//2    #设定步长
        while step>0:
            for i in range(step,len(nums)):    
                while i>=step and nums[i-step]>nums[i]:    #类似插入排序,当前值与指定步长之间的值比较
                                                                                    符合条件则交换位置
                    nums[i],nums[i-step]=muns[i-step],mums[i]
                    i-=step
        return nums
    

      

  • 相关阅读:
    hibernate配置
    关于memset
    Struts2通配符的使用
    Excel表中的数据导入mysql数据库
    蓝桥杯:错误票据
    蓝桥杯:十六进制转八进制
    Android TabHost中切換、修改需要显示的Activity
    Android图片处理(Matrix,ColorMatrix)
    Android gallery滑动惯性问题
    华为手机在开发Android调试时logcat不显示输出信息的解决办法
  • 原文地址:https://www.cnblogs.com/jacky912/p/10697779.html
Copyright © 2011-2022 走看看