快速排序的本质是分治法,快速排序是一种不稳定的排序,即如果两个数字相同,并不能保证其顺序,相比之下冒泡排序是一种稳定的排序。
快速排序的最好的情况是,每次基准数都在最中间,这样时间复杂度是O(logn),最坏的情况是总是这个数组中最大的或者最小的,这时候的时间复杂度是O(n2),平均复杂度是O(nlogn)
代码实现
import java.util.Arrays;
/**
* 时间复杂度
* 最好的情况是每次都在中间,时间复杂度是logn
* 最坏的情况是一边只有一个,另一边是n-1个,时间复杂度是O(n2)
* 平均复杂度是O(logn)
* @author tonge
*
*/
public class Quicksort {
static int a[]={1,35,64,74,7,2,3,8,4,27,0};
static int left=0;
static int right=10;
public static void quickSort(int a[],int left,int right){
if(left>right){
return;
}
int pivot = a[left];
int i=left;
int j=right;
//循环判断a[i]是否大于基准值,a[j]是否小于基准值,如果有,交换
while(i<j){
while(pivot<=a[j]&&i<j)
j--;
while(pivot>=a[i]&&i<j){
i++;
}
if(i<j){
int temp =a[i];
a[i] =a[j];
a[j]=temp;
}
}
//把基准值和a[i]交换
a[left] =a[i];
a[i]= pivot;
//递归
quickSort(a,left,i-1);
quickSort(a,i+1,right);
}
public static void main(String[] args) {
quickSort(a,left,right);
System.out.println(Arrays.toString(a));
}
}