快速排序
一、快速排序的思想。
四、代码实现快速排序。
一、快速排序的思想。
* 快速排序通过将一个数组划分成两个子数组,然后通过递归调用自身为
每一个子数组进行快速排序来进行。
二、如何进行划分。* 设定关键字,将比关键字小的数据放在一起,比关键字大的放在另外一组。
三、如何自动设定关键字
* 设置数组最右端的数据为关键字四、代码实现快速排序。
public class QuickSort {
/*
* 划分数组,point为关键字,left、right为数组索引
* */
public static int partition(long arr[],int left,int right,long point){
int leftPtr=left - 1;
int rightPtr=right;
while(true){
//循环,将比关键字小的留在左端,比关键字大 的留在右端
while(leftPtr<rightPtr && arr[++leftPtr]<point);
while(rightPtr>leftPtr && arr[--rightPtr]>point);
if(leftPtr>=rightPtr){
break;
//return就是结束该方法,break结束该循环
}else{
long tmp=arr[leftPtr];
arr[leftPtr]=arr[rightPtr];
arr[rightPtr]=tmp;
}
}
//将关键字和当前leftPtr所指的这一个进行交换
long tmp=arr[leftPtr];
arr[leftPtr]=arr[right];
arr[right]=tmp;
return leftPtr;
}
public static void displayArr(long[] arr){
System.out.print("[");
for(long num:arr){
System.out.print(num+" ");
}
System.out.print("]");
System.out.println();
}
public static void sort(long[] arr,int left,int right){
if(right-left<=0){
return;
}else{
//设置关键字
long point=arr[right];
//获得切入点,同时对数组进行划分
int partition=partition(arr,left,right,point);
System.out.println("partition="+partition);
//对左边的子数组进行快速排序
sort(arr,left,partition-1);
//对右边的子数组进行快速排序
sort(arr,partition+1,right);
}
}
}
public class TestQuickSort { public static void main(String[] args){ long[] arr=new long[10]; for(int i=0;i<10;i++){ arr[i]=(long)(Math.random()*99); } QuickSort.displayArr(arr); QuickSort.sort(arr, 0, arr.length-1); QuickSort.displayArr(arr); } }