快速排序采用分治的思想,每次任取一个元素作为基准(通常选择首元素),将小于它的元素放在一边,将大于它的元素放在另一边,然后该元素就放到了其最终位置上,将整个排序表分为了独立的两个部分,对这两个部分递归重复直至每部分只有一个元素或为空,则所有元素都放到了它最终的位置上。
快速排序的性能取决于其划分操作的好坏、空间复杂度最好为,最坏为
,平均为
。时间复杂度最坏情况为
。
快速排序如同它名字所说,是所有内部排序中平均性能最优的排序算法,但是它是一种不稳定的排序方法。
void quick_sort(int* nums, int start, int end){
int i = start;
int j = end;
int t = nums[start];
/* 轮流从排序表的左(右)侧将大于(小于)
基准元素的元素置入右(左)侧的空位上,
最后剩下的空位即基准元素的最终位置*/
while (i < j){
while (i < j && t <= nums[j]) j--;
nums[i] = nums[j];
while (i < j && t >= nums[i]) i++;
nums[j] = nums[i];
}
nums[i] = t;
// 递归排序左边
if (start < i-1) quick_sort(nums, start, i-1);
// 递归排序右边
if (i+1 < end) quick_sort(nums, i+1, end);
}
代码仅供参考,欢迎留言讨论。