快速排序代码及实现(优化)

来源:互联网 发布:手机淘宝微淘 编辑:程序博客网 时间:2024/05/17 02:26

传统的快速排序是目前性能最快的排序方法,其在平均情况下的时间复杂度为O(nlogn,)但快速排序性能不稳定,在已经排好序或接近排好序的情况下时间复杂度为O(n*n),分析其原因在于其总是选取序列的第一个元素作为枢轴,而其右侧总是比枢轴大的数,所以一轮下来只能排一个数,所以采用随机数算法讲序列任意一个数与第一个数交换,再把第一个数作为枢轴进行排序。
具体代码如下(以整型数组排序为例):

public static void quickSort(int a[],int p,int r){    if(p<r){        int q = partition(a,p,r);//将数组分为左右两个子序列及一个元素        quickSort(a,p,q-1);        quickSort(a,q+1,r);    }}public static void partition(int a[],int p,int r){    int rand = (int)(Math.Random()*(r-p));    swap(a,p,p+rand);    int x = a[p];    int j = r+1;    int i = p;    while(true){        while(a[++i]<x && i<r);        while(a[--j>x);        if(i>=j){            break;        }        swap(a,i,j);        }    swap(a,p,j);    return j;}public static void swap(int a[],int i,int j){    int temp = a[i];    a[i] = a[j];    a[j] = temp;}
0 0
原创粉丝点击