快速排序
快速排序的思路:
1. 找到基准数据(一般找数组的第一个位置)
2. 对这个数组进行分析,将比基准数据小的放到左侧,比基准数据大的放到右侧
3. 找到基准数据所在的坑,然后分析基准数据两侧的数组,重复上面的步骤
对于一个数组{21,32,43,97,21,5,66}

选择21为基础值,比较21与最右侧的值的大小,一步一步移动high游标

到达右侧第二个位置,可以看出5比21小,小的都要移动到左侧

从左往右比较,开始移动左侧的low游标,比较与base,如果大于base交换


开始移动high游标,找比base值小的




这样一次位置就找好了,21左侧都是比他小的,右侧都是比他大的,分别对左右两侧进行相似的过程
程序实例如下:
public class QuickSort{
public static void main(String[] args){
int[] arr =new int[10];
System.out.print("原数组为:");
for(int i = 0;i<10;i++){
double temp = 100*Math.random();
arr[i] =(int)temp;
System.out.print(arr[i] + " ");
}
System.out.println();
System.out.print("排序后的数组为:");
quickSort(arr,0, arr.length - 1);
for(int i =0 ;i<= arr.length - 1;i++){
System.out.print(arr[i]+ " ");
}
}
public static void quickSort(int[] arr, int low, int high){
if(low >= high) {
return;
}
int division = quick(arr, low, high);
quickSort(arr, low, division - 1);
quickSort(arr, division + 1, high);
}
public static int quick(int[] arr, int low , int high){
while(low < high){
while(low < high && arr[low] < arr[high]){
high--;
}
swap(arr, low, high);
while(low < high && arr[low] < arr[high]){
low++;
}
swap(arr, low, high);
}
return low;
}
public static void swap(int[] arr, int low, int high){
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
}