**
快速排序算法
原理
(1):首先设定一个分界值
(2):将大于等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素的值都小于分界值,而右边部分各元素都大于等于分界值。
(3):然后,左边和右边的数据可以独立排序。对于左边的数组数据,又可以取一个分界值,将该部分的数据分为左右两部分,同样将左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似的处理。
(4):重复上述的过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,在递归排好右侧部分的顺序。当左、右两部分各数据排序完成后,整个数组的排序也就完成了。
代码
package com;
import java.util.Arrays;
/*
* 快速排序算法:
*
* */
public class success {
public static void main(String[] args) {
//1:定义一个数组
int arry[]={2,5,3,9,1,4,6,8};
//2:传入数据
quickSort(arry,0,arry.length-1);
}
//快速排序算法
public static void quickSort(int arry[],int L,int R){
if (L>=R){
return;
}
//1:定义左下标
int left=L;
//2:定义右下标
int right=R;
//3:定义中间值
int pivot=arry[left];
//4:进行选择
while (left<right){
//5:先选择pivot右边的数值
while (left<right&&arry[right]>=pivot){
right--;
}
//6:当右边的数据和中间值相比较小时,交换顺序
if (left<right){
arry[left]=arry[right];
}
//7:选择pivot左边的值
while (left<right&&arry[left]<=pivot){
left++;
}
//8:如果比pivot的值大,则改变刚才右边的值
if (left<right){
arry[right]=arry[left];
}
//9:如果左小标和右下标相遇,则把pivot则把中间值赋值到当前位置
if (left>=right){
arry[left]=pivot;
}
}
//10:定义pivot左边再次排序
quickSort(arry,L,right-1);
//定义pivot右边再次排序
quickSort(arry,right+1,R);
}
}