package com.yq;
/**
* 快速排序算法
* @author yuanqiao
*
*/
public class Quik {
/**
* 快速排序算法
* @param arr 需要排序的int数组
* @param low 需要排序的最小索引
* @param high 需要排序的最大索引
*/
public void sort(int[] arr,int low,int high){
if(low<0){
return;
}
if(high>arr.length-1){
return;
}
if(low>=high){
return;
}
int l=low;
int h=high;
int key=arr[low];
while(l<h){
while(l<h&&key<=arr[h]){ //如何后面的值不大于等于key,那么只是索引减小
h--;
}
if(l<h){
//如果l的索引还是小于h,说明此时arr[l]>arr[h],需要交换位置了。
//可以取巧,减少交换次数,因为key已经是一个固定值了。
arr[l]=arr[h];
l++;
}
while(l<h&&arr[l]<=key){
l++;
}
if(l<h){
arr[h]=arr[l];
h--;
}
arr[l]=key; //最后直接赋值就搞定了
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
if(i<arr.length-1){
System.out.print(",");
}
}
System.out.println("\n");
if(low<l-1){ //如果low还是小于l-1需要对子序列进行递归排序
sort(arr,low,l-1);
}
if(h+1<high){ //同理,如果high试试大于h+1的话,需要对右边的序列进行递归排序。
sort(arr,h+1,high);
}
}
public static void main(String[] args) {
// int[] arr=new int[]{6,10,3,9};
int[] arr=new int[]{6,4,10,3,5,9};
new Quik().sort(arr, 0, arr.length-1);
// 结果如下:
// 5,4,3,6,10,9
//
// 3,4,5,6,10,9
//
// 3,4,5,6,10,9
//
// 3,4,5,6,9,10
}
}
快速排序算法(Java实现)
最新推荐文章于 2022-11-30 08:55:12 发布