排序算法——直接插入排序

直接插入排序,对于少量元素的排序,这是一个很有效的算法

基本思想:将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录增1的有序表

实现过程:使用的是双层循环,外层循环对除了第一个元素之外的所有元素进行遍历, 内层循环对当前元素前面有序表进行待插入位置查找,并进行移动

举个例子,对数组  arr = [2, 3, 67, 5, 56, 25, 56, 65]  进行直接插入排序:

具体的过程为:

        上图中,第一行为待排序的数组,分割线后的表格中,每一行都代表一次排序后的结果,其中绿色代表有序的序列,橘色代表待排序的序列

        从上图中,我们可以得出,直接插入排序是具有稳定性

好了,废话不多说,直接上代码:

注:这个版本的代码,是写代码写嗨了,写成面向对象版本的了,如果想看简化版,最下面有

class InsertionSort(object):

    def __init__(self,arr):
        """初始化"""
        self.arr = arr

    def sort(self):
        """对数组进行直接插入排序"""

        # 遍历除第一个元素之外的所有元素【因为第一个元素是有序的】
        for i in range(1,len(self.arr)):
            # 从第n-1个位置向前遍历,若是小于前面的数,就向前移动
            for j in range(i)[::-1]:
                if self.arr[j+1] < self.arr[j]:
                    self.arr[j+1],self.arr[j] = self.arr[j],self.arr[j+1]

    def show(self):
        """对数组进行遍历"""
        for i in self.arr:
            print(i,end=" ")
        print()


def main():
    arr = [2, 3, 67, 5, 56, 25, 56, 65]
    insert = InsertionSort(arr)
    insert.sort()
    insert.show()

if __name__ == '__main__':
    main()

运行结果为:

从上述代码中,可以看出,直接插入排序算法的性能为:

 下面是简化版代码:

arr = [2, 3, 67, 5, 56, 25, 56, 65]

# 遍历除第一个元素之外的所有元素【因为第一个元素是有序的】
for i in range(1,len(arr)):
    # 从第n-1个位置向前遍历,若是小于前面的数,就向前移动
    for j in range(i)[::-1]:
        if arr[j+1] < arr[j]:
            arr[j+1],arr[j] = arr[j],arr[j+1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值