【编程练习】快速排序,Java和Python实现

来源:互联网 发布:数据库应用技术 编辑:程序博客网 时间:2024/06/16 12:12

Java实现

public class QuickSort {    public static void sort(int[] a) {        sort(a, 0, a.length-1);    }    public static void sort(int[] a, int lo, int hi) {        if (lo >= hi) return;        int j = partition(a, lo, hi);        sort(a, lo, j - 1);        sort(a, j + 1, hi);    }    public static int partition(int[] a, int lo, int hi) {        int value = a[lo];        int i = lo;        int j = hi+1;        while (true) {            while (a[++i] <= value) {                if (i == hi){                    break;                }            }            while (a[--j] >= value) {                if (j == lo){                    break;                }            }            if (i>=j){                break;            }            exch(a, i, j);        }        exch(a,lo,j);        return j;    }    public static void exch(int[] a, int i, int j){        int temp = a[i];        a[i] = a[j];        a[j] = temp;    }    public static void main(String[] args) {        // 测试        int[] a = {3,7,5,2,4};        sort(a);        for (int i:a){            System.out.println(i);        }    }}

Python实现

# -*- coding: utf-8 -*- # 利用缺省参数实现函数重载  def sort(a, lo = None, hi = None):    if lo is None and hi is None:        sort(a, 0, len(a)-1)        return;    if lo is None or hi is None:        print 'error'        return;    if lo >= hi:        return;    j = partition(a, lo, hi)    sort(a, lo, j-1)    sort(a, j+1, hi)# 切分    def partition(a, lo, hi):    value = a[lo]    while True:        i = lo + 1        j = hi        while a[i] <= value and i <= hi:            i += 1        while a[j] >= value and j > lo:            j -= 1        if i >= j:            break        a[i],a[j] = a[j], a[i]  # 交换两个元素的位置    a[lo], a[j] = a[j], a[lo]    return jif __name__ == "__main__":    a = [3,7,5,2,4]    sort(a)    print a
原创粉丝点击