写快排的时候注意两种特殊情况:
第一种是有重复值:{1,2,2,3,3}
第二种是{1,1,1,1,1}
#include<iostream>
#include<vector>
using namespace std;
void quick_sort(vector<int> &num, int l, int r){
if(l>=r) return;
swap(num[l],num[l+rand()%(r-l+1)]);
int x = num[l];
int i = l+1, j = r;
while(i<=j){
while(i<=r&&num[i]<=x){
i++;
}
while(num[j]>x){
j--;
}
if(i>=j) break;
swap(num[i],num[j]);
}
swap(num[l],num[j]);
quick_sort(num,l,j-1);
quick_sort(num,j+1,r);
}
void merge_sort(int *num, int *tmp, int l, int r){
if(l>=r) return;
int mid = (r+l)/2;
merge_sort(num,tmp,l,mid);
merge_sort(num,tmp,mid+1,r);
for(int i=l;i<=r;i++){
tmp[i]=num[i];
}
int i=l, j=mid+1;
for(int k=l;k<=r;k++){
if(i==mid+1){
num[k]=tmp[j++];
}else if(j==r+1){
num[k]=tmp[i++];
}else if(tmp[i]<tmp[j]){
num[k]=tmp[i++];
}else{
num[k]=tmp[j++];
}
}
}
void bubbleSort(int *num, int n){
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++){
if(num[j]>num[j+1]){
swap(num[j],num[j+1]);
}
}
}
}
int main(){
int n;
scanf("%d",&n);
int num[n];
int tmp[n];
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
bubbleSort(num,n);
for(int i=0;i<n;i++){
printf("%d ",num[i]);
}
return 0;
}