zoukankan      html  css  js  c++  java
  • 高速排序,归并排序,堆排序python实现

    高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序

    归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是稳定的排序

    堆排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*logn),平均情况下为O(n*logn),是不稳定的排序

    1.高速排序

    高速排序的介绍以及C语言实如今这里:高速排序C语言实现

    本文介绍的是高速排序python实现:

    def recurse(lista,left,right):
    	if left<right:
    		i=left;
    		j=right;
    		tmp=lista[left];
    		while(i<j):
    			while(i<j and lista[j]>=tmp):
    				j=j-1;
    			if i<j:
    				lista[i]=lista[j];
    				i=i+1;
    			while (i<j and lista[i]<tmp):
    				i=i+1;
    			if i<j:
    				lista[j]=lista[i];
    				j=j-1;
    		lista[i]=tmp;
    		recurse(lista,left,i-1);  #分治
    		recurse(lista,i+1,right);
    	return lista;
    def quicksort(lista):
    	leng=len(lista);
    	recurse(lista,0,leng-1);
    
    lista=[1,4,23,45,97,22,10,4];   #高速排序測试代码
    quicksort(lista);
    print lista;

    2.归并排序

    归并排序及C语言实如今这里:归并排序C语言实现

    本文介绍的是归并排序python实现:

    def merge(lista,left,mid,right):   # 合并有序数组
    	i=left;
    	j=mid+1;
    	tmp=[];
    	while(i<=mid and j<=right):
    		if lista[i]<= lista[j]:
    			tmp.append(lista[i]);
    			i=i+1;
    		else:
    			tmp.append(lista[j]);
    			j=j+1;
    	while(i<=mid):
    		tmp.append(lista[i]);
    		i=i+1;
    	while(j<=right):
    		tmp.append(lista[j]);
    		j=j+1;
    	i=0; 
    	while(i<right-left+1):
    		lista[left+i]=tmp[i];
    		i=i+1;
    def mergerecurse(lista,left,right):
    	if left<right:
    		mid=int((right+left)/2);
    		mergerecurse(lista,left,mid);
    		mergerecurse(lista,mid+1,right);
    		merge(lista,left,mid,right);
    	return lista;
    def mergesort(lista):                              
    	leng=len(lista);
    	mergerecurse(lista,0,leng-1);
    
    lista=[1,4,23,45,97,22,10,4];       #測试代码
    mergesort(lista);
    print lista;
    	

    3.堆排序

    堆排序及C语言实如今这里:堆排序C语言实现

    本文介绍的是堆排序python实现:

    python中提供了堆这样的数据结构。能够直接使用heap中的heappush方法来建立堆,使用heappop来弹出堆中的最小元素。

    from heapq import *;
    def heapsort(lista):
    	h=[];
    	for i in range(0,len(lista)):
    		heappush(h,lista[i]);
    	for i in range(0,len(h)):
    		lista[i]=heappop(h);

    也能够自行实现heap数据结构:

    def heapadjust(lista,s,end):
    	i=2*s+1;
    	tmp=lista[s];
    	while(i<=end):
    		if i+1<=end and lista[i+1]>lista[i]:
    			i=i+1;
    		if lista[i]<=tmp:
    			break;
    		lista[s]=lista[i];
    		s=i;
    		i=s*2+1;
    	lista[s]=tmp;
    def heapsort2(lista):
    	n=len(lista);
    	for i in range((n-1)/2,-1,-1):
    		heapadjust(lista,i,n-1);
    	for i in range(n-1,-1,-1):
    		lista[i],lista[0]=lista[0],lista[i];
    		heapadjust(lista,0,i-1);
    lista=[5,4,2,5,1,7];        # 堆排序測试代码
    heapsort(lista);
    print lista;



  • 相关阅读:
    数据库遇到的2个奇葩的事情
    虚IP解决程序连只读服务器故障漂移
    SQL Server 主库DML操作慢故障处理过程
    优雅地使用pt-archiver进行数据归档(转)
    Mysql表读写、索引等操作的sql语句效率优化问题
    MySQL Performance-Schema(一) 配置篇
    MySQL Performance-Schema(三) 实践篇
    MySQL Performance-Schema(二) 理论篇
    MySQL案例-并行复制乱序提交引起的同步异常
    (转)MySQL- 5.7 sys schema笔记,mysql-schema
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10785143.html
Copyright © 2011-2022 走看看