快速排序是排序的一种分治方法。它的基本思想是,通过一趟排序将待排记录分割为独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
快速排序的时间复杂度为O(N logN)
在最坏情况下,快速排序使用约(N^2)/2次比较
快速排序需要栈空间来实现递归,经过改进栈的最大深度可降为O(log n)
快速排序的时间复杂度为O(N logN)
在最坏情况下,快速排序使用约(N^2)/2次比较
快速排序需要栈空间来实现递归,经过改进栈的最大深度可降为O(log n)
int Partition(Item* a, int low, int
high)
... {
Item v = a[low]; //以子表的第一个元素作为轴,并暂存
while(low < high)
...{
while(low < high && a[high] > v)
--high;
a[low] = a[high];
while(low < high && a[low] < v)
++low;
a[high] = a[low];
}
a[low] = v; //轴元素归位
return low;
}
void QSort(Item* a, int low, int high)
... {
int i = 0;
if(low < high)
...{
i = Partition(a, low, high);
QSort(a, low, i-1);
QSort(a, i+1, high);
}
}
... {
Item v = a[low]; //以子表的第一个元素作为轴,并暂存
while(low < high)
...{
while(low < high && a[high] > v)
--high;
a[low] = a[high];
while(low < high && a[low] < v)
++low;
a[high] = a[low];
}
a[low] = v; //轴元素归位
return low;
}
void QSort(Item* a, int low, int high)
... {
int i = 0;
if(low < high)
...{
i = Partition(a, low, high);
QSort(a, low, i-1);
QSort(a, i+1, high);
}
}