不多说了,直接上代码吧
int quicksort(vector<int>& vec,int l,int r)
{
int key=vec[r];
int pre=l-1;
int cur=l;
while(cur<r)
{
if(vec[cur]<key)
{
pre++;
swap(vec[pre],vec[cur]);
}
cur++;
}
swap(vec[pre+1],vec[r]);
return pre+1;
}
void Quick(vector<int>& vec,int l,int r)
{
if(l<r)
{
int p=quicksort(vec,l,r);
Quick(vec,l,p-1);
Quick(vec,p+1,r);
}
}
归并
void Merge(vector<int>& vec, int l, int m, int r)
{
int len = r - l + 1;
vector<int> tmp(len);
int left = l;
int right = m + 1;
int index = 0;
while (left <= m && right <= r)
{
tmp[index++] = vec[left] <= vec[right] ? vec[left++] : vec[right++];
}
while (left <=m )
{
tmp[index++] = vec[left++];
}
while (right <= r)
{
tmp[index++] = vec[right++];
}
for (int i = 0; i < len; i++)
{
vec[l++] = tmp[i];
}
}
void Mergesort(vector<int>& vec, int l, int r)
{
if (l < r)
{
int m = (l + r) / 2;
Mergesort(vec, l, m);
Mergesort(vec, m + 1, r);
Merge(vec, l, m, r);
}
}