快速排序:
快速排序时一种内部排序,它是以一个基准数来递归将大于这个基准数的数放到它的右边,小于这个基准数的数放到左边,这样一次次递归最终就排好序了。具体详情见代码。
package sort;
import java.util.Random;
/**
* 快速排序DEMO
* @author JackHui
* @version QuickSort.java, 2020年03月06日 9:13
*/
public class QuickSort
{
static final int ARR_SIZE=20;
public static int arr[] = new int[ARR_SIZE];
static Random random=new Random();
//测试main方法
public static void main(String[] args) {
//产生随机数
for(int i=0;i<ARR_SIZE;i++)
{
arr[i]=random.nextInt(ARR_SIZE);
}
show(arr);
System.out.println();
quickSort(arr, 0, arr.length - 1);
show(arr);
}
public static void quickSort(int arr[], int begin, int end)
{
//创建临时排序开始和结束位置变量
int tmpBegin=begin,tmpEnd=end;
//选择第一个为基准变量
int stand=arr[tmpBegin];
//当排序开始位置和结束位置相同时说明,已经按照基准把大于基准数的数移到了右边,小于基准数的数字移到了左边
while(tmpBegin<tmpEnd) {
//先从右边第一个数判断,如果大于或等于基准则将最右边的下标向左移
while(tmpBegin<tmpEnd) {
if(arr[tmpEnd]>=stand) {
tmpEnd--;
}
//当发生交换位置时,退出右边判断的循环
else {
arr[tmpBegin]=arr[tmpEnd]; break;
}
}
//开始从左边第一个数判断,如果小于或等于基准则将最左边的下标向右移
while(tmpBegin<tmpEnd) {
if(arr[tmpBegin]<=stand) {
tmpBegin++;
}
else{
arr[tmpEnd]=arr[tmpBegin]; break;
}
}
}
//当最左下标和最右下标相同,说明当前位置的左边都小于基准,右边都大于基准,将基准值放到当前位置
arr[tmpBegin]=stand;
//判断是否已经排好序了,没有的话再递归调用
if(tmpEnd++<end) {
quickSort(arr,tmpEnd,end);
}
if(--tmpBegin>begin) {
quickSort(arr,begin,tmpBegin);
}
}
public static void show(int arr[])
{
for (int i : arr) {
System.out.print(i + ",");
}
}
}