快速排序(伪代码 c/c++ python 实现)

来源:互联网 发布:手机环境监控软件 编辑:程序博客网 时间:2024/06/02 00:38

快速排序

最简单的快排。

以头元素作为标记元素,将大于标记元素的数字放在其的右边,小于的放在其左边。之后对于左边和右边的分别排序。

parttitioned (input list[], input left, input right)pivot <- list[left]i <- leftj <- rightwhile (i < j) dowhlie (i < j and list[j] >= pivot) doj <- j - 1endif (i < j)list[i] <- list [j]whlie (i < j and list[i] < pivot) doi <- i + 1endif (i < j)list[j] <- list [i]endlist[i] <- pivotreturn iquicksort (input list[], input left, input right)if (left < right)mid = parttitioned(list, left, left)quicksort (list, left, mid-1)quicksort (list, mid+1, right)end if
 

c/c++

int partitionsed (int a[], int left, int right){int pivot = a[left];int i = left,j = right;int k;while (i < j){while (i < j && a[j] >= pivot)j--;if (i < j)a[i] = a[j];while (i < j && a[i] < pivot)i++;if (i < j)a[j] = a[i];}a[i] = pivot;        return i;}


void quicksort(int a[],int left,int right){if (left < right){int insert = partitionsed(a,left,right);quicksort (a,left,insert-1);quicksort (a,insert+1, right);}}
 python

def partitioned(list, left, right):    pivot = list[left]    i = left    j = right    while i < j:        while i < j and list[j] >= pivot:            j = j - 1        if i < j:            list[i] = list[j]        while i < j and list[i] < pivot:            i = i + 1        if i < j:            list[j] = list[i]        list[i] = pivot    return idef QuickSort(list, left, right):    if (left < right ):        mid = partitioned(list, left, right)        QuickSort(list, left, mid-1)        QuickSort(list, mid+1,right)list = [5, 1, 7, 3, 7, 0, 4, 8, 6, 9]QuickSort(list, 0, 9)print list





原创粉丝点击