您的位置:首页 > 其它

快速排序

2016-08-08 09:18 225 查看
几经周折,虽然还是有点bug,但是理解快速排序的内容啦。

快速排序,首先就是要先找到一个中间的标准(主元),然后把主元放在序列的最后,分别从前到后和从后到前将其他数字与主元进行比较,以达到分段的目的。

import java.util.Scanner;
public class Quick {
//交换两个整数
private static void swap(int a,int b){
System.out.println("a="+a+" b="+b);
int temp;
temp=b;
b=a;
a=temp;
System.out.println("a="+a+" b="+b);
}
//找主元,并把它放在数组的最后位置
private static int pivotKey(int num[],int left,int right){//left=0;right=num.length-1;
int temp;
int mid=(left+right)/2;
int a=num[left];
int b=num[mid];
int c=num[right];
System.out.println(a+":"+b+":"+c);
if(a>b){
temp=b;
b=a;
a=temp;
}
System.out.println(a+":"+b+":"+c);
if(c<=a){
swap(num[left],num[right]);
return a;
}
else if(c>=b){
swap(num[mid],num[right]);
return b;
}
else{
return c;
}
}
public static void quicksort(int num[],int left,int right){
int pivot=pivotKey(num,left,right);
System.out.println(pivot);
int i=left;
int j=right;
for(;
4000
;){
while(i<=right&&num[i]>pivot){
i++;
}
while(j>=0&&num[j]<pivot){
j--;
}
if(i<j){
int temp;
temp=num[i];
num[i]=num[j];
num[j]=temp;
}
else{
break;
}
}
if(j-left>2){
quicksort(num,left,j-1);
}
if(right-i>2){
quicksort(num,i+1,right);
}
System.out.println(right);

}
public static void main(String []args){
int n;
Scanner s=new Scanner(System.in);
n=s.nextInt();
int[] a=new int
;
for(int i=0;i<n;i++){
a[i]=s.nextInt();
}
//System.out.println(pivotKey(a,0,n-1));
quicksort(a,0,n-1);
for(int i=0;i<n;i++){
System.out.print(a[i]+" ");
}
}
}


最坏运行时间:当输入数组已排序时,时间为O(n^2)。

最佳运行时间:O(nlgn)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: