快速排序:
void recursive(vector<int>& vec,int start,int end) {
if(start>=end) {
return ;
}
int split_num = vec[start];
int pos = start+1;
int i=end;
int temp;
while(pos<=i&&i>start) {
if(vec[i]<split_num) {
temp=vec[pos];
vec[pos]=vec[i];
vec[i]=temp;
pos++;
} else {
i--;
}
}
temp=vec[start];
vec[start]=vec[pos-1];
vec[pos-1]=temp;
recursive(vec,start,pos-2);
recursive(vec,pos,end);
}
void quickSort(vector<int>& vec) {
recursive(vec,0,vec.size()-1);
}
歸併排序:
void recursive(vector<int>& vec,int start,int end) {
if(start>=end) {
return ;
}
int mid=(start+end)/2;
recursive(vec,start,mid);
recursive(vec,mid+1,end);
vector<int> copy;
int index1=start;
int index2=mid+1;
while(index1<=mid&&index2<=end) {
if(vec[index1]<vec[index2]) {
copy.push_back(vec[index1++]);
} else {
copy.push_back(vec[index2++]);
}
}
while(index1<=mid) {
copy.push_back(vec[index1++]);
}
while(index2<=end) {
copy.push_back(vec[index2++]);
}
for (int i = start; i <= end; i++)
{
vec[i]=copy[i-start];
}
}
void mergeSort(vector<int>& vec) {
recursive(vec,0,vec.size()-1);
}