Day8-堆排序和移除元素
Posted spytensor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day8-堆排序和移除元素相关的知识,希望对你有一定的参考价值。
几次面试后深知非科班在基础上的弱势,故决定自2018年5月7日起刷一波算法和数据结构,编程语言为:Python。
(6)排序算法-堆排序
算法思想:
堆排序是一种利用堆这种特殊的数据结构进行快速排序的算法,主要是利用最大堆或者最小堆堆性质,不断地重复抽元素--恢复堆的性质这样的操作。
Python代码:
def heap_sort(list):
#创建以及调整最大堆
for start in range((len(list) - 2) // 2, -1, -1):
sift_down(list, start, len(list) - 1) # 堆排序
for end in range(len(list) - 1, 0, -1):
list[0], list[end] = list[end], list[0]
sift_down(list, 0, end - 1)
return list# 最大堆调整
def sift_down(lst, start, end):
root = start
while True:
child = 2 * root + 1
if child > end:
break
if child + 1 <= end and lst[child] < lst[child + 1]:
child += 1
if lst[root] < lst[child]:
lst[root], lst[child] = lst[child], lst[root]
root = child
else:
break
LeetCode-27 移除元素
问题描述:
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
重点:只是在原位置移除且不考虑新长度后的元素。
实现代码:
class Solution:
def removeElement(self, nums, val):
""" :type nums: List[int] :type val: int :rtype: int """
j = 0
for i in range(len(nums)):
if nums[i] != val:
nums[j] = nums[i]
j += 1
return (j)
Python算法实现之---冒泡排序
深度学习开发环境配置--win10+Tensorflow-GPU
以上是关于Day8-堆排序和移除元素的主要内容,如果未能解决你的问题,请参考以下文章