归并排序

此处只有代码:

def merge(li,left,mid,right):temp = []i = left;j=mid+1while i <= mid and j <= right:if li[i] < li[j]:temp.append(li[i])i=i+1else:temp.append(li[j])j=j+1while i<=mid:temp.append(li[i])i=i+1while j<=left:temp.append(li[j])j=j+1for i in range(len(temp)):li[left+i] = temp[i]def mergeSort(li, left, right):if(left<right):mid = (left + right)/2mergeSort(li,left,mid)mergeSort(li,mid+1,right)merge(li,left,mid,right)

结果:

堆排序

代码:

def adjustHeap(arr, i, n):temp = arr[i] #取出当前元素i # 从i的左节点开始,也就是2*i+1k = 2*i+1while k < n:if k + 1 < n and arr[k] < arr[k+1]:#如果左子节点小于右子节点,则将k指向右子节点k += 1if arr[k] > temp:#如果子节点的值大于父节点,将子节点的值付给父节点arr[i] = arr[k]i = k k=k*2+1else:k=k*2+1breakarr[i] = temp def heapsort(arr):#1.构建大顶堆for i in range(len(arr)//2-1, -1, -1):#从最后一个非叶子节点开始调整,从下往上从左往右adjustHeap(arr, i, len(arr))print(arr)#2.调整堆结构,交换堆顶元素与末尾元素for j in range(len(arr)-1, -1, -1):arr[j], arr[0] = arr[0], arr[j]#重新对堆进行排序adjustHeap(arr, 0, j)

构建初始堆经推导复杂度为O(n),在交换并重建堆的过程中,需交换n-1次,而重建堆的过程中,根据完全二叉树的性质,[log2(n-1),log2(n-2)…1]逐步递减,近似为nlogn。
堆排序时间复杂度O(nlogn)。
选择排序的一种,所以属于不稳定排序。

【数据结构笔记】归并排序(merge_sort)+ 堆排序 -- python2.7相关推荐

  1. 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记

    复习梗概 画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的 合并两个有序数组的merge函数写法 时间复杂度的分析方法!!! 其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法 ...

  2. 【数据结构】堆、堆排序笔记

    [数据结构]堆.堆排序笔记 堆是一棵完全二叉树,树的每个结点的值都不小于(或者不大于)其左右孩子的值. 父亲结点大于等于孩子结点的值叫做大顶堆,反之叫做小顶堆 大顶堆的每个结点的值都是以它为根结点的子 ...

  3. 数据结构笔记(王道考研) 第八章:排序

    大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...

  4. 堆排序时间复杂度_leetcode刷题(二):排序算法(归并排序,堆排序,桶排序)...

    今天,我们要来讲讲排序问题,这次讲的排序算法主要是归并排序,堆排序和桶排序. 归并排序 归并一词在中文的含义就是"合并,并入"的意思,在数据结构里面就是将两个或者两个以上的有序数组 ...

  5. 数据结构与算法之堆排序

    数据结构与算法之堆排序 目录 堆排序介绍 代码实现 1. 堆排序介绍 堆排序(Heapsort)是指利用堆((英语:heap)是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组 ...

  6. Python天天美味(32) - python数据结构与算法之堆排序

    1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data):     for i in ran ...

  7. 数据结构笔记--线性表定义与实现(Swift)

    数据结构笔记系列 数据结构笔记-两个有序链表合并成一个有序链表 线性表   线性表是最常用且最简单的一种数据结构,简言之,一个线性表是 n 个数据元素的有序序列. 特点 只有一个首结点和尾结点: 除首 ...

  8. 数据结构笔记(王道考研) 第五章:树和二叉树

    大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...

  9. 数据结构笔记:选择排序

    原文地址添加链接描述 分类目录--数据结构笔记 每一步在未排序部分去比较当前标记的最小值(初始化为第1个)与当前值的大小,更新(或不跟新)最小值的索引,维护的是一个最小值的索引 每一轮找一个最小值,替 ...

  10. 二、考研数据结构笔记——绪论(理解数据结构,算法,时间复杂度计算做题技巧)

    一.数据结构基本概念 1.数据:数据是信息的载体.客观事物的一种表现形式.万事万物都能用数据表示出来. 2.数据元素:数据元素是数据的基本单位,一个数据元素有若干个数据项组成 3.数据项:构成数据元素 ...

最新文章

  1. SonarQube的安装、配置与使用
  2. 和AI机器人Alice的一段聊天记录
  3. 使用ASM 4处理Java类文件–第二部分:Tree API
  4. 你离BAT之间,只差这一套Java面试题
  5. AI_机器学习与深度学习有什么区别?
  6. 线性方程组基础解系的简便算法
  7. 分享一个代码合并工具
  8. React -- Switch的使用
  9. Python PYQT5中用Label控件显示以numpy表示的灰度图像
  10. 如何在浏览器中支持H265/HEVC
  11. Android开发之关机广播
  12. 【ava数据集】ava数据集下载 使用迅雷
  13. Dell戴尔笔记本电脑G5 15 5590原装出厂Windows10系统1903恢复原厂oem系统
  14. (Note)Python 统计列表中各元素出现的次数
  15. 10以内随机加、减法练习题
  16. 祝大家2016中秋佳节快乐!阖家幸福安康!!
  17. 开放-封闭原则(The Open-Closed Principle)
  18. 【开源项目】之智能婴儿摇篮
  19. 微信小程序数据缓存Storage
  20. usb high speed chirp

热门文章

  1. POJPower Network (最大流)
  2. [转载]MySQL优化之索引的运用(2)
  3. Linux下的iftop命令介绍
  4. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第7节 Arrays工具类_17_Arrays练习:字符串倒序...
  5. Vuebnb 一个用 vue.js + Laravel 构建的全栈应用
  6. mysql 电商项目(二)
  7. springBoot springSecurty: x-frame-options deny禁止iframe调用
  8. Linux-c对一个十六进制数的某一位取反
  9. element-UI中table表格的row-click事件怎么获取一行数据的id
  10. 导出FLASH用反射的时候要注意的问题