快速排序代码详解

void quicksort(int left, int right)
{
if(left>=right)
return ;
int i=left;
int j=right;
int mid=(left+right)/2; //基准数选择最中间的数字,这个可以是其他的数字,不一定非得是中间的数
int p=a[mid];
while(i<=j) //当从两侧找的数重合时,结束本次查找和交换
{
while(a[i]<p)i++; //从左侧找比基准数大的数
while(a[j]>p)j--; //从右侧找比基准数小的数
if(i<=j)
{
swap(a[i],a[j]); //交换刚才找的的数
i++;
j--;
}
}
if(left<j)quicksort(left,j); //这里和下面的if可以理解为只要,而不是如果,目的是为了给递归找一个范围
if(i<right)quicksort(i,right);
}

这是递归调用快排算法的代码
递归的原理在于找到基准数,然后比基准数大的数都放在右侧,小的数都放在左侧,不用考虑顺序,然后将左右两侧的数分别再进行这种操作,直到所有的子序列全部按照这种顺序排好。

以上就是快排算法的详解了

关于基准数的找法其实还有很多种,这只是其中的一种,将这一种算法理解了目前就够用了

posted @ 2025-08-04 21:18  暗神酱  阅读(11)  评论(0)    收藏  举报