插入排序python实现

一、基本原理


有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数
据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法




## 算法步骤、


⒈ 从有序数列{a1}和无序数列{a2,a3,…,an}开始进行排序;


⒉ 处理第i个元素时(i=2,3,…,n),数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;


⒊ 重复第二步,共进行n-i次插入处理,数列全部有序。




二、 代码实现



def insert_sort(arr):


    #建立一个空列表,存储排好的数据,并且初始化为arr[0]
    brr=[]
    brr.append(arr[0])


    #依次取得无序数列arr{a2,a3,…,an}中的元素进行排序
    for i in range(1,len(arr)):


        #每次遍历brr列表,寻找满足条件的元素
        for j in range(0,len(brr)):


            if arr[i] < brr[j]: #如果当前arr中的值,比brr的小,直接插入
                brr.insert(j,arr[i])
                break
            if arr[i] >= brr[j]: #如果当前arr中的值,比brr的大,
                                 # 需要判断是否已经到达brr的队尾,如果是,则插入
                if j< len(brr)-1:
                    continue
                elif j==len(brr)-1:
                    brr.append(arr[i])




    return brr       #返回已经排好的列表


a=[3,5,1,9,0,2,4]
b=insert_sort(a)
print(a)
print(b)





三、 性能分析


算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法.
最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)

猜你喜欢

转载自blog.csdn.net/weixin_42587961/article/details/81057609