美文网首页
编程笔试题(二)插入排序

编程笔试题(二)插入排序

作者: 薪火_ | 来源:发表于2019-03-01 10:06 被阅读0次

继续我们的简单排序之旅。

题目

看一下这道编程题。

使用python对list中的元素进行插入排序,并编写unittest单元测试用例来进行验证。

插入排序的过程如下图所示。

编程笔试题(二)插入排序

盯着上面的图看2分钟,把排序的来龙去脉看清楚。

插入排序的过程是

首先假设队列左边的元素是已经排序过的元素
依次遍历已排序过的元素右边的元素,将该元素与左边已排序的元素做比较,这样左侧已排序的元素个数就会依次增加
重复第二步,直到所有的元素全部排序完成

简单来说,插入排序很像是打扑克的理牌过程。我们手里的牌是已经排序过的,每次新抓一张牌,就将牌插入到手里已排序的牌中的合适位置,保证手里的牌一直是排序过的。

参考答案

import unittestdef insertion_sort(arr):
    length = len(arr)
    i = 1 # 从位置1开始向右遍历,因为我们假设位置0上的元素是已经排序好了的
    while i < length: # 开始抓牌
        j = i # j代表当前已排序的数字的结束位置
        while j > 0: # j < 0时证明已经遍历完了已排序的部分
            if arr[j - 1]  > arr[j]:
                arr[j - 1], arr[j] = arr[j], arr[j - 1] # 找到合适的位置插入
            j = j - 1 # 持续遍历已排序的部分
        i = i + 1 # 持续抓牌class SortTestCase(unittest.TestCase):
    def test_insertion_sort(self):
        test_data_1 = [8, 7, 6, 5, 4, 0, 1]
        test_data_2 = [9, 5, 2, 7]
        copy_of_data_1 = test_data_1[:]
        copy_of_data_2 = test_data_2[:]
        insertion_sort(test_data_1)
        insertion_sort(test_data_2)
        copy_of_data_1.sort()
        copy_of_data_2.sort()
        self.assertEqual(test_data_1, copy_of_data_1)
        self.assertEqual(test_data_2, copy_of_data_2)if __name__ == '__main__':
    unittest.main()

思考

大家可以思考下面一些问题

插入排序的时间复杂度最好的情况和最坏的情况分别是多少?平均复杂度是多少?

相关文章

  • 编程笔试题(二)插入排序

    继续我们的简单排序之旅。 题目 看一下这道编程题。 使用python对list中的元素进行插入排序,并编写unit...

  • 几种实用的简易的排序算法

    也是面试题 一、插入排序 1.插入排序—直接插入排序(Straight Insertion Sort) 思路 遍历...

  • 插入排序

    一、直接插入排序 二、折半插入排序

  • Synchronized到底锁住的是谁?

    先来一道并发编程笔试题 题目:利用5个线程并发执行,num数字累计计数到10000,并打印。 这道并发编程面试题,...

  • 部分简单排序

    调用测试 插入排序 二分插入排序 希尔排序 冒泡排序

  • 7天练|Day3:排序和二分查找

    关于排序和二分查找的几个必知必会的代码实现排序实现归并排序、快速排序、插入排序、冒泡排序、选择排序编程实现O(n)...

  • 排序(新排版)

    冒泡排序 插入排序 二分插入排序 希尔排序 选择排序 快速排序

  • 4、作业:插入排序和二分查找

    插入排序 二分查找

  • python

    1.4 创造世界 4 编程小成(上) 4.1 每日一贴 5.1 冒泡排序 5.2 选择排序 5.3 插入排序

  • 排序

    冒泡排序,插入排序,快速排序 1.2编程实现O(n)时间复杂度内找到一组数据的第K大元素 2.1有序数组的二分查找...

网友评论

      本文标题:编程笔试题(二)插入排序

      本文链接:https://www.haomeiwen.com/subject/xevruqtx.html