[硕.Love Python] QuickSort(快速排序)

def partition(a, i, j):
    k = -1
    while True:
        while k * (a[i] - a[j]) >= 0:
            if i == j: 
                return i
            j += k
        a[i], a[j] = a[j], a[i]
        i, j, k = j, i - k, -k

def qsort(a, i, j):
    if i < j:
        k = partition(a, i, j)
        qsort(a, i, k - 1)
        qsort(a, k + 1, j)

def quickSort(a):
    qsort(a, 0, len(a) - 1)

if __name__ == ‘__main__‘:
    from random import shuffle

    data = range(100)
    shuffle(data)

    print ‘before:\n‘, data
    quickSort(data)
    print ‘after:\n‘, data

刘硕老师Python精品课程:

《Python高级编程技巧实战》:

http://coding.imooc.com/class/62.html

 

《Python算法实战视频课程》:

http://study.163.com/course/courseMain.htm?courseId=1003617013

 

《Python科学计算—NumPy实战课程》:

http://edu.51cto.com/course/course_id-5046.html

 

熊猫TV直播间:

http://www.panda.tv/671023

时间: 2024-12-13 16:37:12

[硕.Love Python] QuickSort(快速排序)的相关文章

Python与快速排序

这个算法系列主要是自己学习算法过程中动手实践一下,写这个文章作为笔记和分享个人心得,如有错误请各位提出. 注:转载请说明出处 问题提出: 将以下数据升序排列:5, 2, 8, 6, 4, 9, 7, 3, 1 快速排序的原理: 快速排序的核心思想是(如下图) 1.先确定一个基准数,让后按照比较规则,如本例是升序排列,则将比基数大的放到右边,比基数小的放到左边. 2.接下来各边重复步骤1,直到全部排序完毕. 程序设计的思路就是(以上面的问题为例) 左右分别遍历比较 1 #非程序代码,只用来讲解 2

python实现快速排序算法(两种不同实现方式)

# -*- coding: utf-8 -*- """ Created on Fri May 16 17:24:05 2014 @author: lifeix """ #快速排序 import sys import random length = 30 def qsort(arr,left,right): lp = left rp = right if lp == rp:return while True: while arr[lp] >=

[硕.Love Python] BinomialHeap(B堆 & 二项堆)

class Node(object):     def __init__(self, data):         self.data = data         self.child = None         self.left = None         self.right = None         self.degree = 0     def __str__(self):         return str(self.data)     __repr__ = __str_

[硕.Love Python] FibonacciHeap(F堆 & 斐波那契堆)

class Node(object):     __slots__ = [         'data', 'child', 'left', 'right',         'degree', 'parent', 'childCut',     ]     def __init__(self, data):         self.data = data         self.child = None         self.left = None         self.right

Python实现快速排序

这里采用的是算法导论的划分方式: import random def partition(array, left, right): pivot = array[left] i = left #j left +1 -> right for j in range(left + 1, right + 1): if array[j] < pivot: i += 1 temp = array[i] array[i] = array[j] array[j] = temp temp = array[left

Python实现快速排序算法

快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元素,称为 "基准"(pi

算法分析之——quick-sort快速排序

快速排序是一种排序算法,最坏情况运行时间为θ(n2),但其最佳期望运行时间为θ(nlgn),并且θ(nlgn)记号中隐含的常数因子很小,快排是在就地排序的一种排序算法.快排是基于分治思想的,与归并排序一样.快速排序是一种不稳定的排序算法,因为算法实现过程中涉及到元素交换. 思路: (1)分解:数组A[n]被划分两个字数组A[0..q-1]和A[q+1..n],使得对于数组A[0..q-1]中的元素都小于A[q], A[q+1..n]中的元素都大于等于A[q].此时A[q]就得排好序. (2)解决

Python 实现快速排序和随机快速排序

直接上代码: #快速排序 #coding: utf-8 def quicksort(a,left,right): if(left<right): mid = partition(a,left,right) quicksort(a,left,mid-1) quicksort(a,mid+1,right) def partition(a,left,right): x = a[right] i = left-1 #初始i指向一个空,保证0到i都小于等于 x for j in range(left,ri

[硕.Love Python] RadixSort(基数排序)

def radixSort(a, n):     rl = [[] for _ in xrange(10)]     for i in xrange(n):         t = 10 ** i          for j in xrange(len(a)):             rl[a[j] / t % 10].append(a[j])         k = 0         for r in rl:             for x in r: