您的位置:首页 > 编程语言 > Java开发

快速排序 及 java实现

2013-01-08 14:25 169 查看
描述:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小

过程:

分解:数组A[p…r]被划分成两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p ..q-1] <= A[q] <= A[q+1 ..r]

解决:递归调用对子数组A[p..q-1]和A[q+1…r]排序

合并:合并数组

时间复杂度:O(n * log n)

伪代码:

QUICKSORT(A,p,r)

if p<r

then q = PARITION(A,p,r)

QUICKSORT(A,p,q-1)

QUICKSORT(A,q+1,r)

排序完整数组最初调用 QUICKSORT(A,1,lenght[A])

PARITION(A,p,r)

x=A[r]

i=p-1

for(j=p to r-1)

do if(A[j]<=x)

then i = i+1

exchange A[i] = A[j]

exchange A[i+1] = A[r]

return i+1

代码实现:

/*快速排序*/

private static void Qsort(int[] a,int low,int high){

if(low < high){

int pivotloc = quickSort(a,low, high);

Qsort(a,low, pivotloc-1);

Qsort(a, pivotloc+1, high);

}

}

private static int quickSort(int []a,int low,int high){

int x = a[high];

int i = low - 1;

for(int j = low;j<=high-1;j++){

if(a[j]<=x){

i = i+1;

exchange(i,j);

}

}

exchange(i+1,high);

System.out.println("第"+time+"次排序结果");

time++;

for(int index=0;index<a.length;index++){

System.out.print(a[index]+" ");

}

System.out.println("");

return i+1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: