码迷,mamicode.com
首页 > 编程语言 > 详细

算法导论笔记1 - 插入排序 vs 归并排序

时间:2015-05-17 09:15:48      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

import random
import time

__author__ = Administrator

LENGTH = 3000
base = []

for i in range(0, LENGTH):
    base.append(random.randint(0, LENGTH))


def ins_sort(array):
    for border in range(1, len(array)):
        j = border - 1
        key = array[border]
        while j >= 0 and array[j] > key:
            array[j + 1] = array[j]
            j -= 1
        array[j + 1] = key


def merge_sort(array):

    def split(arr):
        return arr[0: int(len(arr) / 2)], arr[int(len(arr) / 2):]

    res = []
    k_a = k_b = 0
    part_a, part_b = split(array)
    if len(part_a) is not 1:
        part_a = merge_sort(part_a)
    if len(part_b) is not 1:
        part_b = merge_sort(part_b)
    while k_a < len(part_a) and k_b < len(part_b):
        if part_a[k_a] < part_b[k_b]:
            res.append(part_a[k_a])
            k_a += 1
        else:
            res.append(part_b[k_b])
            k_b += 1
    if k_a < len(part_a):
        res.extend(part_a[k_a:])
    else:
        res.extend(part_b[k_b:])
    return res

print("=======")
print(base)
pre = time.time()
result = base.copy()
ins_sort(result)
print("insertion:" + str(time.time() - pre))
print(result)

print("=======")
print(base)
pre = time.time()
result = merge_sort(base)
print("merge:" + str(time.time() - pre))
print(result)

 

插入排序具有 O(n^2) 的时间复杂度, 基于分治的归并排序具有 O(n logn) 的时间复杂度。这段代码是两种排序的简单实现,对于这台特定的计算机和这两个特定的算法, n > 80 时,归并排序具有更高的计算效率,反之插入排序具有更高的效率。 不考虑高阶项,设 Tins(n) = c1 n^2, Tmer(n) = c2 nlogn,Tins(80) = Tmer(80) = 80 c1 = log 80 c2,c1 / c2 = 0.0238。

算法导论笔记1 - 插入排序 vs 归并排序

标签:

原文地址:http://www.cnblogs.com/zbdzzg/p/4509097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!