package com.maiya;
/**
* 排序算法--快速排序法
* 快速排序法通过使用任意选择的分割元素来分割值列,然后递归地对分割元素的任意一端子列进行
* 排序,从而实现值列的排序。快速排序算法的一般性策略如下:首先,在值列中选择一个元素作为
* 分割元素,其次分割值列,使分割元素左侧的所有元素都小于它,其右侧的所有元素都大于它。最
* 后,(递归地)对两个分割部分应用上述的排序策略。
* @author WHF
*
*/
public class Sort {
public static void main(String[] args) {
int[] n={7,18,6,1,8,5,9,15,2,16,3};
quickSort(n,0,n.length-1);
for(int i=0;i<n.length;i++){
System.out.println(n[i]);
}
}
static void quickSort(int[] n,int left,int right){
if(left<right){
int pattion=pattion(n,left,right);
//对临界点左端递归排序
quickSort(n,left,pattion);
//对临界点右端递归排序
quickSort(n,pattion+1,right);
}
}
static int pattion(int[] n,int left,int right){
//记录分割元素,此处以值列的最左端元素为分割元素
int pivod=n[left];
//记录分割元素所在索引
int start=left;
while(left<right){
//从右向左查找一个大于分割元素的元素
while(n[right]>pivod){
right--;
}
//从左向右查找一个小于分割元素的元素
while(n[left]<=pivod && left<right){
left++;
}
//将寻找到的两个元素交换
if(left<right){
int temp=n[left];
n[left]=n[right];
n[right]=temp;
}
}
//将分割元素与right索引处(大于分割元素与小于分割元素的临界点)的交换
int temp=n[right];
n[right]=pivod;
n[start]=temp;
//返回临界点
return right;
}
}
排序算法--快速排序法
最新推荐文章于 2022-01-11 20:35:13 发布