这道题说是用快排,但其实用归并排序就能过(你信不?)
用STL也能过(不用质疑)
首先奉上归并排序代码:
#include <iostream>
using namespace std;
int a[100005], b[100005];
void merge(int l, int r) {
int p1=l,mid=(l+r)/2,p2=mid+1,p=l;
while(p1<=mid&&p2<=r){
if(a[p1]<=a[p2]){
b[p++]=a[p1++];
}else{
b[p++]=a[p2++];
}
}
while(p1<=mid){
b[p++]=a[p1++];
}
while(p2<=r){
b[p++]=a[p2++];
}
for(int i=l;i<=r;i++){
a[i]=b[i];
}
}
void merge_sort(int l, int r) {
if(l==r){
return;
}
int mid=(l+r)/2;
merge_sort(l,mid);
merge_sort(mid+1,r);
merge(l,r);
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
merge_sort(0,n-1);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
return 0;
}
然后奉上sort代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
最后是STL:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
multiset<int> pig;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
pig.insert(x);
}
for (multiset<int>::iterator it = pig.begin(); it != pig.end(); it++) {
cout << *it << " ";
}
return 0;
}
よろしくお願いします!!!