python排序算法总结和实现
------------------希尔排序-------------
一直没搞懂希尔排序怎么搞得
def Shell_sort(L):
    step = len(L)/2
    while step > 0:
        for i in range(step,len(L)):            #在索引为step到len(L)上,比较L[i]和L[i-step]的大小
            while(i >= step and L[i] < L[i-step]):      #这里可以调整step从小到大或者从大到小排列
                L[i],L[i-step] = L[i-step],L[i]
                i -= step
        step /= 2
    print L
Shell_sort(L)
------------------插入排序-------------
一个有序数列,一个无序数列,遍历无序数列,把数据插入到有序数列的相应位置
def insertion_sort(A):
    length=len(A)
    for i in range(1,length):
        key=A[i]
        j=i-1
        while j>0 and A[j]>key:
            A[j+1]=A[j]
            j=j-1
        A[j+1]=key
    return A
------------------冒泡排序-------------
比较相邻的两个元素,保证每次遍历到最后的元素是最大的
def bubble_sort(A):
    length=len(A)
    for i in range(length-1):
        for j in range(length-i-1):
            if A[j]>A[j+1]:
                A[j],A[j+1]=A[j+1],A[j]
    return A
------------------选择排序-------------
从未排序的数列中找到最小的元素放在起始位置
def selection_sort(A):
    length=len(A)
    for i in range(length):
        min_=i
        for j in range(i+1,length):
            if A[j]<A[min_]:
                min_=j
        A[i],A[min_]=A[min_],A[i]
    return A
------------------快速排序-------------
一个元素作为基准,比基准数大的放右边,小的放左边,再对左右区间递归
def quik_sort(A):
    def qsort(A,left,right):
        if left>right:
            return A
        l=left
        r=right
        key=A[l]
        while l<r:
            while A[r]>=key and l<r:
                r-=1
            while A[l]<=key and l<r:
                l+=1
            A[l],A[r]=A[r],A[l]
        A[left],A[l]=A[l],A[left]
        qsort(A,left,l-1)
        qsort(A,r+1,right)
        return A
    return qsort(A,0,len(A)-1)
------------------归并排序-------------
递归分解数组,再合并
def MergeSort(lists):
    if len(lists) <= 1:
        return lists
    num = int( len(lists) / 2 )
    left = MergeSort(lists[:num])
    right = MergeSort(lists[num:])
    return Merge(left, right)
def Merge(left,right):
    r, l=0, 0
    result=[]
    while l<len(left) and r<len(right):
        if left[l] < right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1
    result += left[l:]
    result += right[r:]
    return result
------------------堆排序-------------
将无序列表看成二叉树,每次调整二叉树成为最大堆,即根节点是最大的元素,然后把根节点和最后一个元素互换,递归调整剩余元素
#建堆
def build_max_heap(A):
    lastnode=math.floor((len(A))/2-1)
    for i in range(lastnode,-1,-1):
        max_heapify(A,i)
    return A
#维护最大堆
def max_heapify(A,i):
    length=len(A)
    max_index=i
    if (2*i+1)<length:
        left=2*i+1
        if A[left]>A[i]:
            max_index=left
    if (2*i+2)<length:
        right=2*i+2
        if A[right]>A[max_index]:
            max_index=right
    if max_index!=i:
        A[max_index],A[i]=A[i],A[max_index]
        max_heapify(A,max_index)
    return A
#堆排序
def heapsort(A):
    length=len(A)
    A=build_max_heap(A)
    for i in range(length-1,-1,-1):
        A[0],A[i]=A[i],A[0]
        A[:i]=max_heapify(A[:i],0)
    return A
												
											python排序算法总结和实现的更多相关文章
- python排序算法实现(冒泡、选择、插入)
		
python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)) ...
 - Python排序算法之选择排序定义与用法示例
		
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
 - 44.python排序算法(冒泡+选择)
		
一,冒泡排序: 是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个,如果他们的排序错误就把他们交换过来. 冒泡排序是稳定的(所谓稳定性就是两个相同的元素不会交换位置) 冒泡排序算法的运作如下 ...
 - python 排序算法总结及实例详解
		
python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...
 - 带你掌握4种Python 排序算法
		
摘要:在编程里,排序是一个重要算法,它可以帮助我们更快.更容易地定位数据.在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的. 本文分享自华为云社区<Python ...
 - Python排序算法
		
不觉已经有半年没写了,时间真是容易荒废,这半年过了个春节,去拉萨旅行.本职工作也很忙,没有开展系统的学习和总结. 今年开始静下心来从基础开始学习,主要分为三部分,算法.线性代数.概率统计. 首先学习算 ...
 - Python排序算法——冒泡排序
		
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10786904.html 一.冒泡排序(Bubb ...
 - Python排序算法——插入排序
		
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787464.html 一.插入排序(Inse ...
 - Python排序算法——选择排序
		
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787340.html 一.选择排序(Sele ...
 - Python排序算法——快速排序
		
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10768593.html 排序算法(Sortin ...
 
随机推荐
- 【Pod Terminating原因追踪系列之一】containerd中被漏掉的runc错误信息
			
前一段时间发现有一些containerd集群出现了Pod卡在Terminating的问题,经过一系列的排查发现是containerd对底层异常处理的问题.最后虽然通过一个短小的PR修复了这个bug,但 ...
 - 源码浅入浅出 Java ConcurrentHashMap
			
从源码的角度深入地分析了 ConcurrentHashMap 这个线程安全的 HashMap,希望能够给你一些帮助. 老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程 ...
 - LeetCode 95 | 构造出所有二叉搜索树
			
今天是LeetCode专题第61篇文章,我们一起来看的是LeetCode95题,Unique Binary Search Trees II(不同的二叉搜索树II). 这道题的官方难度是Medium,点 ...
 - vue 中使用echarts
			
前言:在vue2.0中使用百度echarts有三种解决方案. 一.原始方法直接使用 这样每次都要获取图表dom元素 然后通过setOption渲染数据,最后在mounted中初始化.很麻烦. < ...
 - Google Kick Start 2020 Round B T4 Wandering Robot
			
题意 一个\(n \times m\)的矩形空间,起点是\((1,1)\),终点是\((n,m)\). 假设当前位于\((x,y)\): 如果当前位于最后一行,那么下一步只能走向\((x,y+1)\) ...
 - 20190923-06Linux文件权限类 000 014
			
文件属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定.在Linux ...
 - 转载:Linux: What’s the difference between a soft link and a hard link?
			
Link:https://www.moreofless.co.uk/linux-difference-soft-symbolic-link-and-hard-link/ This example sh ...
 - ajax之---原生ajax
			
原生ajax,基于XMLHttpRequest对象来完成请求 <!DOCTYPE html><html><head lang="en"> ...
 - 腾讯会议大规模使用Kubernetes的技术实践
			
腾讯会议,一款提供灵活协作的线上会议解决方案.其中大量的模块是有状态服务,在使用Kubernetes为其进行容器化部署时,Pod升级需保持共享内存.长连接服务.升级时只容忍ms级抖动,需提供大规模分批 ...
 - Alibaba内部SpringCloud参考笔记,在GitHub一天就标星81.6k?
			
前言 阿里巴巴,作为国内互联网公司的Top,算是业界的标杆,有阿里背景的程序员,也更具有权威性.作为程序员,都清楚阿里对于员工要求有多高,技术人员掌握的技术水平更是望尘莫及.所以,大厂程序员的很多经验 ...