JAVA实现快速排序
1. 快速排序基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
2. 算法分析
时间复杂度
最好情况:O(nlogn)
最坏情况:O(n2)
平均情况:O(nlogn)
空间复杂度: O(logn) (栈占用的空间)
稳定性: 不稳定
代码实现
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] array = {6,1,2,7,9,3,4,5,10,8};
int left = 0;
int right = array.length - 1;
quickSort(array,left,right);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
public static void quickSort(int[] array,int left,int right){
if(left > right){
return;
}
//设置一个基准数
int base = array[left];
int i = left;
int j = right;
while ( i != j){
//从右边往左边找小于基准数的位置
while (array[j] >= base && i < j){
j--;
}
//从左边往右边找大于基准数的位置
while (array[i] <= base && i < j){
i++;
}
//将两个数互换位置
if(i < j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
//将基准数与中间数互换位置
array[left] = array[i];
array[i] = base;
//左边进行排序
quickSort(array,0,i - 1);
//右边进行排序
quickSort(array,j + 1, right);
}
}