快排:通过多次比较与交换完成快速排序,其中比较与交换需要利用一个划分函数
适合本身无序的数列,若本身有序时,无论是递增还是递减,此时的时间复杂度为O(n^2)
理想情况下的时间复杂度为O((log2)n)->log以2为底n的对数;
划分函数:(双向划分)取一个无序数组ar的数字tmp=ar=[left],从数组末尾(right)开始遍历, 若ar[right] <tmp;则将right--;
遇到大于tmp的数字则将该数字ar[right]移动置ar[left];又开始从左边递增(left++)寻找 比tmp大的数字,再将该数字移动置ar[right];重复上述动作,直至left=rigt;
此时经过一次划分 右边 >tmp;左边<tmp;再将左右两边一次划分,直至所有数组有序结 束
划分函数图解
划分函数代码(双向划分)
int Parition(int* br, int left, int right)
{
int tmp = br[left];
while (left<right )
{
while (left<right && br[right]>=tmp)//先从后面开始比较,当right>tmp时,跳出循环
right -= 1;
if (left < right)
br[left] = br[right];//跳出上述循环后&#