设为首页 加入收藏

TOP

Python算法基础(四)
2018-10-19 16:45:53 】 浏览:39
Tags:Python 算法 基础
def merge_sort(data, low, high): """ 归并排序 :param data: 待排序的数据列表 :param low: 数据列表开始位置 :param high: 数据列表结束位置 :return: """ if low < high: # 至少有两个元素才进行 mid = (low + high) // 2 # 分割 merge_sort(data, low, mid) # 递归分割上一部分 merge_sort(data, mid + 1, high) # 递归分割下一部分 merge(data, low, mid, high) # 合并 if __name__ == '__main__': import random data_list = [1, 3, 21, 6, 50, 33, 34, 58, 66] random.shuffle(data_list) # 打乱列表数据 print("pre:", data_list) merge_sort(data_list, 0, len(data_list) - 1) print("after:", data_list) #结果: #pre: [21, 3, 33, 58, 34, 66, 1, 6, 50] #after: [1, 3, 6, 21, 33, 34, 50, 58, 66]

希尔排序

效率:与增量有关,O(n1+)其中<0£<1,如增量为2k-1 复杂度为O(n3/2)

原理:

  1. 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。
  2. 先在各组内进行直接插入排序;
  3. 取第二个增量d2<d1重复上述的分组和排序,直至所取的增量  =1(  <  …<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
def shell_sort(data):
    """
    希尔排序
    :param data:待排序的数据列表 
    :return: 
    """
    d1 = len(data) // 2  # 设置分割大小为d1,
    while d1 > 0:
        for i in range(d1, len(data)):
            tmp = data[i]  # 当前分割元素位置
            j = i - d1  # 上一个分割元素位置
            while j >= 0 and tmp < data[j]:  # 上一个元素分割位置比当前分割位置要大,则需要调整位置
                data[j + d1] = data[j]  # 后移动当前分割元素位置
                j -= d1  # 往前移d1
            data[j + d1] = tmp
        d1 //= 2  # 继续分割


if __name__ == '__main__':
    import random
    data_list = [1, 3, 21, 6, 50, 33, 34, 58, 66]
    random.shuffle(data_list)  # 打乱列表数据
    print("pre:", data_list)
    shell_sort(data_list)
    print("after:", data_list)
#结果:
#pre: [3, 66, 58, 34, 33, 50, 6, 21, 1]
#after: [1, 3, 6, 21, 33, 34, 50, 58, 66]

 

 

 

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python并发之多进程 下一篇Python多线程补充—GIL

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目