快速排序

来源:互联网 发布:电脑课本软件 编辑:程序博客网 时间:2024/06/05 14:25
/**
 * 快速排序
 * @author qian
 *基于划分的方法
 *划分的思想是:以priot为枢纽,将待排序的数组划分为两组,左边的一组元素小于枢纽,右边的一组元素大于枢纽
 *划分的做法为:左边扫描到比枢纽大的就停下来,右边扫描到比枢纽小的也停下来(一般选择数组最右边的元素为枢纽),然后交换位置,直到左边指针与右边指针重合
 *快速排序就是先把数组划分,再对左右两边的数组递归调用自身
 */
public class QuickSort {


public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {23,89,5,7,12,20,50,33,48,56};
quickSort(array,0,9);
System.out.println("排序后的数组为:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}

public static void quickSort(int[] a,int left,int right){
if(right-left<=0)
return ;
else{
int priot = a[right];
int partition = partitionSort(a,left,right,priot);
quickSort(a,left,partition-1);
quickSort(a,partition+1,right);

}
}

public static int partitionSort(int[] a,int left,int right,int priot){
int leftPos = left - 1;
int rightPos = right +1;
while(true){
while(leftPos<right&&a[++leftPos]<priot);
while(rightPos>left&&a[--rightPos]>priot);
if(leftPos>=rightPos)
break;
else
swap(a,leftPos,rightPos);

}
swap(a,leftPos,right);
return leftPos;
}


private static void swap(int[] a, int leftPos, int rightPos) {
int temp = a[leftPos];
a[leftPos] = a[rightPos];
a[rightPos] = temp;

}


}
0 0
原创粉丝点击