标签:
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。
标签:
原文地址:http://www.cnblogs.com/zbdzzg/p/4509097.html