#include<iostream>
using namespace std;
//快速排序 复杂度 O(n*logn) //但只指一般条件(运气好的时候) 就是k a[0]要在数组中比较中间的位置
//运气不好的时候 就是一个数组比较有序的时候 复杂度为n*n
//但我们可以手动的随机打乱 但也占复杂度
void swap(int &a,int &b)//交换数值的函数
{
int tmp=a;
a=b;
b=tmp;
return ;
}
void quicksort(int a[],int s,int e)
{
if(s>=e)//先写返回条件 就是最后只有一个元素
{
return;
}
int k=a[s];//起点
int i=s;j=e;
while(i!=j)//i指针和j指针 没有重叠的时候
{
//偶数次交换时
while(j>i&&a[j]>=k)
{
j--;//指针右移
swap(a[i],a[j])//一旦不满足 k的位置 数值交换
//奇数次交换时
while(j>i&&a[i]<=k)
i++;//指针左移
swap(a[i],a[j]);//此时i指针和j指针都在k的位置 重合
}
//进行分治 递归
quicksort(a,s,i-1);//所以从k的上一位开始
quicksort(a,i+1;e);
}
}
int main()
{
}
快速排序<分治>
最新推荐文章于 2024-09-16 17:46:36 发布