这次我要分享的是算法中的另一种排序:快速排序
快速排序可以说是排序当中大部分情况下效率最高的排序算法。
是一种基于数据交换的排序。
时间复杂度为O(nlog2n) , 是一种不稳定的排序算法。
快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
如下代码便是本人写的快排代码
void _quick_sort(int* arr,size_t left,size_t right)
{
if(left >= right) return;
//计算标杆的下标
int pi = (left+right)/2;
//备份标杆的值
int pv = arr[pi];
//备份左右下标
int l=left, r=right;
//左右下标相遇时结束
while(l < r)
{
//在标杆的左边寻找比它大的数
while(l<pi && arr[l] <= pv) l++;
if(l<pi) //如果没有超出范围,说明找到比标杆大的值
{
//与标杆交换位置,并记录标杆的位置
arr[pi] = arr[l];
pi = l;
}
//在标杆的右边寻找比它小的数
while(pi<r && arr[r] >= pv) r--;
if(pi<r) //如果没有超出范围,说明找到比标杆小的值
{
arr[pi] = arr[r];
pi = r;
}
}
//还原标杆的值
arr[pi] = pv;
//进入递归
if(pi-left > 1) _quick_sort(arr,left,pi-1);
if(right-pi > 1) _quick_sort(arr,pi+1,right);
}
void quick_sort(int* arr,size_t len)
{
_quick_sort(arr,0,len-1);
}
冒泡排序:https://blog.csdn.net/weixin_43505112/article/details/97297043
归并排序:https://blog.csdn.net/weixin_43505112/article/details/97299733
插入排序:https://blog.csdn.net/weixin_43505112/article/details/97514627
堆排序:https://blog.csdn.net/weixin_43505112/article/details/97516883
选择排序:https://blog.csdn.net/weixin_43505112/article/details/97515978