1.快速排序的基本特性
1)稳定性:不稳定
2)平均时间复杂度:O(nlogn)
3)最小时间复杂度:O(nlogn)
4)最大时间复杂度:O(n2)
6)空间复杂度:O(log n)
2.算法描述:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
3.算法实现:
public static String aaaaaa() {
long time1=System.nanoTime();
int[] list = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
disassembly(list,0,list.length-1);
System.out.println(System.nanoTime() - time1);
for (int i = 0; i < list.length; i++) {
System.out.print(list[i]+" ");
}
System.out.println();
return "1";
}
public static void disassembly(int[] list,int left,int right){
int i, j, t, temp;
if(left > right)
return;
temp = list[left]; //temp中存的就是基准数
i = left;
j = right;
while(i != j) { //顺序很重要,要先从右边开始找
while(list[j] >= temp && i < j)
j--;
while(list[i] <= temp && i < j)//再找右边的
i++;
if(i < j)//交换两个数在数组中的位置
{
t = list[i];
list[i] = list[j];
list[j] = t;
}
}
//最终将基准数归位
list[left] = list[i];
list[i] = temp;
disassembly(list,left, i-1);//继续处理左边的,这里是一个递归的过程
disassembly(list,i+1, right);//继续处理右边的 ,这里是一个递归的过程
}
4.算法结果:
36764
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50
5.算法分析:
最佳情况:T(n) = O(nlogn)
最差情况:T(n) = O(n2)
平均情况:T(n) = O(nlogn)