package d09快速排序;
public class QuickSort {
//划分数组
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;
}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 display(long [] arr){
for(long num :arr){
System.out.print(num+" ");
}
}
public static void sort(long [] arr,int left,int right){
if(right-left<0){
return;
}
//设置关键字
long point = arr[right];
//获得切入点,同时对数组进行划分
int partition = partition(arr, left, right, point);
//对左边的子数组进行快速排序
sort(arr, left, partition-1);
//对右边的子数组进行排序
sort(arr,partition+1,right);
}
}
快速排序
最新推荐文章于 2023-02-08 14:07:15 发布