快速排序 及 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
代码实现:
过程:
分解:数组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; }
相关文章推荐
- 快速排序非递归算法的java实现
- 快速排序--简洁的JAVA/PHP实现
- Java实现对两个List快速去重并排序操作示例
- 快速排序Java实现
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 快速排序的超简单实现(Java)
- 快速排序Java实现--最简单的实现方法
- 快速排序的一种java实现
- java 实现快速排序
- 快速排序详解--Java实现
- 冒泡、插入、快速、选择排序的java实现
- 快速排序的java实现(key的位置可任取)
- 快速排序-java实现
- 快速排序 Java实现
- Java实现之快速排序
- 快速排序--Java实现
- 排序算法【java实现】(三)快速排序
- 排序算法(二)_希尔排序、快速排序、归并排序的Java实现
- java实现常见排序(选择,冒泡,插入,快速,希尔,堆)
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序