介绍:
快速排序是一种分治的排序算法。它会在数组中选择一个基准元素,讲数组分为两部分,使得第一部分中的所有元素都小于或等于基准元素,而第二部分中的所有元素都大于基准元素。对第一部分和第二部分递归的应用快速排序算法。
通俗解释
1.选择基准元素(默认数组第一个元素为基准元素)
2.设置两个哨兵指针,i指向数组最开始的元素,j指向数组最末尾的元素
3.第一个元素作为基数,比它小的数都在左边,比它大的数都在右边
4.从左往右遍历数组,每次遍历的数都小于基数,则i++,否则停止遍历,保留i
5.从右往左遍历数组,每次遍历的数都大于基数,则j–,否则停止遍历,保留j
6.交换arr【i】和arr【j】,继续遍历,直到 i=j
7.基数左边递归,基数右边递归
代码:
void Quick_Sort(int *arr, int begin, int end){
if(begin > end)
return;
int tmp = arr[begin];
int i = begin;
int j = end;
while(i != j){
while(arr[j] >= tmp && j > i)
j--;
while(arr[i] <= tmp && j > i)
i++;
if(j > i){
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[begin] = arr[i];
arr[i] = tmp;
Quick_Sort(arr, begin, i-1);
Quick_Sort(arr, i+1, end);
}
时间空间复杂度
结论
快速排序(Quicksort)是对冒泡排序的一种改进。
每次选择的基数,都放在它最终的位置上
关键字的比较和交换是跳跃进行的,因此,快速排序是一种不稳定的排序方法。