快速排序
快速排序又叫做分区交换排序,是目前已知的平均速度最快的一种排序方法,它是对冒泡排序的一种改进。
快速排序的基本思想是:通过一趟排序将排序序列分割成3个部分,即左部、基准值、右部。其中,左部所有数据都比基准值小,右部所有数据都比基准值大。接着,再对左部和右部进行快速排序。
方法:在数组中任选一个数作为基准数据,一般情况下我们选取第一个数。接着将所有比基准值小的数放在基准值左边,所有比基准值大的数放在基准值右边。
例:
代码:
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[] {9,4,12,7,34,10,5,6};
quickSort(arr,0,arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int left,int right) {
int p,i,j,temp;
if(left >= right) {
return;
}
//p就是基准数,这里就是每个数组的第一个
p = arr[left];
i = left;
j = right;
while(i < j) {
//右边当发现小于p的值时停止循环
while(arr[j] >= p && i < j) {
j--;
}
//左边当发现大于p的值时停止循环
while(arr[i] <= p && i < j) {
i++;
}
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
arr[left] = arr[i];
arr[i] = p;
//对左边进行快速排序
quickSort(arr,left,j-1);
//对右边进行快速排序
quickSort(arr,j+1,right);
}
}