快速排序的实现-C语言

来源:互联网 发布:知学学院于鲁 编辑:程序博客网 时间:2024/06/06 01:31
介绍
         快速排序是速度非常快的排序,虽然其最糟糕(已经排好序)的时间为O(n^2),但是平均时间可以达到O(nlgn),平均性能比堆排序优越!是原地排序算法。基于分治法思想。
 
思想
         A[left..right]被分成2个(可能空)子数组A[left..center-1]和A[center+1..right]。使得前子数组每个元素都<= A[center],
而后子数组的元素全>=A[center]。
        通过递归调用快速排序。对2个子数组进行排序。
       
        下面是QuickSort.c源码。通过linux的gcc和windows的VS2010编译测试。
#include<stdio.h>void exchange(int *a,int *b){int tmp = *b;*b = *a;*a = tmp;}int QPartition(int A[], int left ,int right){int key = A[right];int leftindex = left-1;int cur = left;for(cur;cur < right; cur++){if(A[cur] <= key){leftindex +=1;exchange(&A[leftindex],&A[cur]);}}exchange(&A[leftindex+1] ,&A[right]);return leftindex+1;}void QuickSort(int a[],int left,int right){if(left<right){int center = QPartition(a,left,right);QuickSort(a,left,center-1);QuickSort(a,center+1,right);}}void printArr(int *p, int size){int i;for(i=0; i<size;i++){printf("%d ",p[i]);}putchar('\n');}int main(){int b[10]={-3,1,34,5,-1,3,43,5,123,3};printArr(b,10);QuickSort(b,0,9);printArr(b,10);return 0;}

结果是:

-3 1 34 5 -1 3 43 5 123 3
-3 -1 1 3 3 5 5 34 43 123

原创粉丝点击