快速排序
一、算法思路
快排是对冒泡排序的一种改进
1、首先丛书类中取出一个数作为基准数;
2、分区,将小于这个数的数全放到它的左边,大于它的数全放到它的右边;
3、再对左右区间重复第二步,直到各区间只剩一个数。
二、java代码实现
package sort;
import java.util.Arrays;
/*
* 快排是不稳定的
* 时间复杂度是O(nlogn)
*
*/
public class QuickSort {
public static void main(String[] args){
int[] arr = {9,8,7,6,5,4,3,2,1};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int low,int high){
if(low<high){
int i = low;
int j = high;
int pivot = arr[i];
while(i<j){
//从后向前
while(i<j && arr[j]>=arr[i]){
j--;
}
//交换
swap(arr,i,j);
//从前向后
while(i<j && arr[i]<=arr[j]){
i++;
}
//交换
swap(arr,i,j);
}
//递归地进行左右两部分的快排
quickSort(arr,low,j-1);
quickSort(arr,j+1,high);
}
}
public static void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}