快速排序
介紹:通過多次劃分實現操作
思想:每一趟選擇當前說有子序列中的一個關鍵字(通常是第一個)作爲樞軸,將子序列中比樞軸小的移到樞軸前邊,比樞軸大的移到樞軸後邊;當本趟所有子序列都被樞軸以規則劃分完畢後會得到一組更短的子序列,它們成爲下一趟劃分的初始序列集
int quicksort(int R[],int low,int high)
{
int temp;
int i=low,j=high;
if(low<high)
{
temp=R[low];
while(i<j)
{
while(j>i&&R[j]>=temp)
{
--j;//右往左掃描 ,找第一個小於temp的
}
if(i<j)
{
R[i]=R[j];//第一個比temp小的放在temp的左邊
++i;//低位i後移1位
}
while(i<j&&R[i]<temp)
{
++i;//從左往右掃描 ,找到第一個比temp大的
}
if(i<j)
{
R[j]=R[i];//第一個比temp大的放在temp右邊
--j;//高位j前移1位
}
}
R[i]=temp;
quicksort(R,low,i-1);
quicksort(R,i+1,high);
//直到i遇到j之後結束,劃分爲不同的分區
}
return 1;
}
分治法: 快速排序採用分爲治之。
最壞的時間複雜度O(n2) ——這裏是平方
最好的時間複雜度O(n*long2n) ——這是以2爲底取n的對數