python 快排

某公司的面试题之一。

RT。

def exchange(mylist,i,j):
    tmp = mylist[i]
    mylist[i] = mylist[j]
    mylist[j] = tmp

def patition(mylist,p,q):
    key = mylist[q]
    i = p-1
    for j in range(p,q):
        if mylist[j] <= key:
            i = i+1
            exchange(mylist,i,j)
    exchange(mylist,i+1,q)
    return i

def quicksort(mylist,p,q):
    if p < q:
        r = patition(mylist,p,q)
        quicksort(mylist,p,r-1)
        quicksort(mylist,r+1,q)

mylist = [5,8,0,2,1,9,10,3,6,7,4]
quicksort(mylist,0,len(mylist)-1)
print mylist
      

结果:

>>>

[0, 1, 2, 3, 4, 5, 6, 8, 7, 9, 10]

>>>

吐槽:

觉得py好美,它的list传进去函数中,就是原始的list,而不是副本。

如果要看《算法导论》中的伪代码,请看下链接:http://blog.csdn.net/emaste_r/article/details/7100997

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-01 10:29:21

python 快排的相关文章

python 快排,堆排,归并

#归并排序def mergeSort(a,L,R) :    if(L>=R) :        return    mid=((L+R)>>1)    mergeSort(a,L,mid)    mergeSort(a,mid+1,R)    p=L    q=mid+1    t=[]    while(p<=mid and q<=R) :        if a[p]<=a[q] :            t.append(a[p])            p+=

python快排算法

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 1 def kp(arr,i,j): 2 if i < j: 3 base = kpgc(arr,i,j) 4 kp(arr,i,base) 5 kp(arr,base+1,j) 6 def kpgc(arr,i,j): 7 base = arr[i] 8 while i < j: 9 whil

【陌陌】Python 快排

import random def qsort2(array): if len(array) <= 1: return array else: return qsort2([i for i in array[1:] if i<array[0]]) + [array[0]] + qsort2([i for i in array[1:] if i>=array[0]]) def qsort(array, left, right): if left >= right: pass else

python快排

代码: 1 def partition(data,left,right): 2 tmp = data[left] 3 while left<right: 4 while left < right and data[right]>=tmp: 5 right -=1 6 data[left] = data[right] 7 while left < right and data[left]<=tmp: 8 left +=1 9 data[right] = data[left] 1

python 冒泡和快排,不多说【无聊】

1 #-*-coding:utf8-*- 2 import random 3 a=[] 4 b=[] 5 def init_array(): 6 for i in range(10000): 7 v = random.randint(1,10000) 8 a.append(v) 9 b.append(v) 10 11 #冒泡 12 def sort_array(a): 13 for i in range(len(a)): 14 for j in range(i+1,len(a)): 15 if

Python实现排序(冒泡、快排、归并)

Thomas H.Cormen 的<算法导论>上介绍的几个经典排序算法的Python实现. 1.冒泡排序: 简单的两重循环遍历,使最小(最大)的值不断地往上升(下沉)而实现的排序,算法时间为O(n2). 代码如下: 1 def up_sort(a): 2 # 冒泡排序 3 4 a_length = len(a) 5 while True: 6 i = 0 7 j = 1 8 9 while True: 10 if a[i] > a[j]: 11 a[i], a[j] = a[j], a[

python 版 quicksort 快排

今天看了下苹果xml 解析,写了个小demo 心想还是 在博客上写点东西吧,毕竟很久很久都没有上来了 先上个效果图把 接下来 看下 工程目录图吧 本demo 分两种解析模式,一是苹果自带的, 首先先看下苹果自带的吧,工程文件为 NoteXMLParser 文件 ,另一种解析模式 是 NotesTBXMLParser文件 NoteXMLParser.h 文件代码如下 : // // NoteXMLParser.h // TestXML // // Created by choni on 14-5-

用python写个快排

快排过程比较简单就直接上代码了: 1 #!/usr/bin/python3 2 3 def quik_sort(L, left, right): 4 if left <= right: 5 key = L[left] 6 i = left 7 j = right 8 while i < j: 9 while i < j and key <= L[j]: 10 j -= 1 11 L[i] = L[j] 12 while i < j and L[i] <= key: 13

Python的快排应有的样子

快排算法 ? 简单来说就是定一个位置然后,然后把比它小的数放左边,比他大的数放右边,这显然是一个递归的定义,根据这个思路很容易可以写出快排的代码 ? 快排是我学ACM路上第一个让我记住的代码,印象很深刻,以前学的是Pascal,写这个要写好长一串,但是因为和归并排序比起来还算短的,也就背下来了.好奇的我点开百科看python的快排代码,就看到了如下代码: #quick sort def quickSort(L, low, high): i = low j = high if i >= j: re