python高速排序

import random
def rand(n):
    for i in range(n):
        yield random.randint(0,1000)
#创建一个随机数列表
def createList(n):
    lists=[]
    for i in rand(n):
        lists.append(i)
    return lists
#挖坑法高速排序
def quick_sort(lists,l,r):
    if(l<r):
        #x是选取的pivot基准值,然后把数据大于基准值的排到右边。小于基准值的排到左边
        i,j,x=l,r,lists[l]
        while(i<j):
            #j从右边開始遍历,找到j<x的地方,并跟lists[i]交换。
            while(i<j and lists[j]>=x):
                j-=1
            if(i<j):
                lists[i]=lists[j]
                i+=1
            #i从左边開始遍历,找到j>x的地方。并跟lists[j]交换
            while(i<j and lists[i]<=x):
                i+=1
            if(i<j):
                lists[j]=lists[i]
                j-=1
        #此时,i已经大于等于j了。也就是说i左边的都小于x,右边都大于x,所以如今把i填入x,接下来就递归排序
        lists[i]=x
        quick_sort(lists,l,i-1)
        quick_sort(lists,i+1,r)

lists=createList(1000)
print lists
quick_sort(lists,0,len(lists)-1)
print lists
时间: 2024-11-16 13:43:59

python高速排序的相关文章

高速排序算法C++实现

//quick sort //STL中也有现成的高速排序算法.内部实现採用了下面技巧 //1)枢轴的选择採取三数取中的方式 //2)后半段採取循环的方式实现 //3)高速排序与插入排序结合 #include<vector> #include<iostream> #include<algorithm> using namespace std; //这一版本号是最简单实现版本号.对于高速排序的优化主要有下面几个方面: //1)枢轴的选择.若枢轴选取不全适.比方,若每次递归时

白话经典算法系列之六 高速排序 高速搞定

高速排序因为排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被採用,再加上高速排序思想----分治法也确实有用,因此非常多软件公司的笔试面试,包含像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也经常出现高速排序的身影. 总的说来,要直接默写出高速排序还是有一定难度的,因为本人就自己的理解对高速排序作了下白话解释,希望对大家理解有帮助,达到高速排序,高速搞定. 高速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它採用了一种分治的

排序算法之高速排序

这一个博客将高速排序讲的挺好的:http://blog.csdn.net/morewindows/article/details/6684558 一.算法思想描写叙述 1)令i = L,j = R,将基准数挖出形成第一个坑(基准数能够选择第一个位置上的数作为基准数,也能够选择其它位置上的数作为基准数). 2)j--   . 从后往前扫,找到第一个比基准数小的数.并将其"挖出",填到上一个形成的坑中arr[i] 3)i++ . 从前往后扫,找到第一个比基准数大的数.并将其"挖出

高速排序

所谓的高速排序,就是在一些中,找一个数(如果为a)为基准.把这些数分成两部分.一部分小于等于a,还有一部分大于a. 思路: (1)在这些数中,设置一个指针指向第一个(low),一个指针指向最后一个(high).设置一个基点(取第一个)为v (2)从高位置high開始.假设*high > v,则high--,然后看low,假设*low<v,则low++. (3)交换*low和*high (4)递归运行上面的 #include <stdio.h> void swap(int *a,in

&lt;转&gt;python字典排序 关于sort()、reversed()、sorted()

一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a','have','I'])) #['I', 'have', 'a', 'dream'] 2.让人糊涂的sort()与sorted() 在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort(). sorted() sorted(iterable[,

希尔排序和高速排序

//希尔排序 在直接插入排序算法中,每次插入一个数,使有序序列仅仅添加1个节点,而且对插入下一个数没有提供不论什么帮助. 假设比較相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比較就可能消除多个元素交换. D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想.算法先将要排序的一组数按某个增量d分成若干组, 每组中记录的下标相差d.对每组中所有元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序. 当增量减到1时,整个要排序的数被分成一组,排序完

高速排序算法

高速排序算法 作者 July  二零一一年一月四日------------------------------------------ 写之前,先说点题外话.每写一篇文章,我都会遵循下面几点原则:一.保持版面的尽量清晰,力保排版良好.二.力争所写的东西,清晰易懂,图文并茂三.尽最大可能确保所写的东西精准,有实用价值. 由于,我认为,你既然要把你的文章,发布出来,那么你就一定要为你的读者负责.不然,就不要发表出来.一切,为读者服务. ok,闲不多说.接下来,咱们立马进入本文章的主题,排序算法.众所

经典排序之高速排序

高速排序堪称最经典的排序.思想是选一个基准值.一般选第一个.然后全部的值与基准值比較,大的位置不变, 小的位置与第一个大的位置互换,就这样进行第一轮排序.然后对于基准值二边的再进行排序,依次类推,直到为剩一个. 以下是快排的代码: public class QuickSort { public void quickSort(int a[],int start,int end){ //比較这个数组是否仅仅有一个值没有进行高速排序 if(start<end){ //基准值 int keyword=a

《算法导论》 — Chapter 7 高速排序

序 高速排序(QuickSort)也是一种排序算法,对包括n个数组的输入数组.最坏情况执行时间为O(n^2). 尽管这个最坏情况执行时间比較差.可是高速排序一般是用于排序的最佳有用选择.这是由于其平均性能相当好.期望的执行时间为O(nlgn).且O(nlgn)中隐含的常数因子非常小.另外它还能够进行就地排序在虚拟环境中也能非常好的工作. GitHub chapter 7 程序代码下载 原理 高速排序也和合并排序一样,基于分治法,分为分解.解决.合并三个步骤. 分解:数组array[low-hig