昨天了解了快速排序的基本思路,并对一组无序数列进行了快速排序,今天将学习用快速排序编写一段java程序,这也是学习算法的根本目的,就是解决一个问题,下面标出代码:
public void change(Object[] r,int low,int high){
int temp = r[low];
while(low < high){
while(low < high && strategy.compare(r[high],temp) >= 0 ) high--;
r[low] = r[high];
while(low < high && strategy.compare(r[low],temp) <= 0 ) low++;
r[high] = r[low];
}
r[low] = temp;
return low;
}
public void quickSort(Object[] r,int low,int high){
if(low < high){
int p = change(r,low,high);
change(r,low,p-1);
change(r,p+1,high);
}
}
快速排序的复杂度分析:
1.时间复杂度
快速排序算法的运行时间依赖于划分是否平衡,根据基准数元素将序列划分为两个子序列中的元素个数,而划分是否平衡还依赖于所使用的枢纽元素。
最坏情况:所得到的子序列中一个子序列为空,相当于冒泡排序,每一次都有一个元素在一边,n-1的元素在另一边,此时的时间复杂度为o(n的平方)。
最好情况:每次排序的基准数恰巧在中间,恰巧左侧和右侧的元素一样多,此时的时间复杂度公式则为:T[n] = 2T[n/2] + f(n),T[n/2]为平分后的子数组的时间复杂度,f[n] 为平分这个数组时所花的时间,下面为最优情况下的时间复杂度分析:
参考自:http://blog.csdn.net/yuzhihui_no1/article/details/44198701,在此表示感谢!!