1.算法简单实现步骤
(1)选择一个基准值,一般选数组得第一个。
(2)将数组分成两个子数组:小于基准值的和大于基准值的元素
(3)对这两个子数组进行快速排序(使用递归)
2.算法的平均时间复杂度为nlogn,最糟糕的时候是n^2;
算法简单介绍两个指针,分别从数组的首尾开始向中间运动,左指针先运动,左指针指到的数若大于或等于基准值则停下来,当左指针停下来的时候,右指针运动,右指针指到的数若小于枢纽元则停下来,此时,交换左右指针指向的数,然后重复上述运动。直到左右指针相遇,运动结束。
代码展示
public class quicksort {
public static void QuickSort(int [] arr, int low,int high) {
int i ,j, base,temp;
if(low>high) {
return;
}
i=low;
j=high;
base=arr[low];//base就是基准值
while(i<j){
//先看右边的值,依次向左边递减
while(i<j&&base<=arr[j]) {
j--;
}
//再看左边的值,依次向右边递增
while(i<j&&base>=arr[i]) {
i++;
}
//如果满足条件,交换两个值
if(i<j) {
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
// 将基准值与i与j的相等位置调换
arr[low]=arr[i];
arr[i]=base;
//递归调用左边数组
QuickSort(arr, low, j-1);
//递归调用有半数组
QuickSort(arr, j+1, high);
}
public static void main(String[] args) {
int [] arr= {10,5,2,3};
QuickSort(arr, 0, arr.length-1);
for(int i = 0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
}