快排
#include<iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
using namespace std;
int a[105],n;
void quickSort(int low, int high){
if(high<=low) return;
int tmp = a[low];
int l=low,h=high;
while(low<high){
while(a[high]>tmp && high>low) high--;
a[low] = a[high];
while(a[low]<=tmp && low<high) low++;
a[high] = a[low];
}
a[low] = tmp;
quickSort(l,low-1);
quickSort(low+1,h);
}
int main(){
scanf("%d",&n);
for(int i=1; i<=n; i++){
scanf("%d",&a[i]);
}
quickSort(1,n);
for(int i=1; i<=n; i++){
printf("%d ",a[i]);
}
return 0;
}
堆排序
#include<iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
using namespace std;
int a[105],n;
//调整堆
void push_down(int root,int len){
int tmp = a[root];
while(true){
int child = root*2;
if(child>len){
break;
}
if(root*2+1<=len){
if(a[root*2]<a[root*2+1]){
child++;
}
}
if(tmp<a[child]){
a[root] = a[child];
root = child;
} else {
break;
}
}
a[root] = tmp;
}
void HeapSort(int len){
for(int i=len/2; i>=1; i--){
push_down(i,len);
}
while(true){
swap(a[1],a[len]);
push_down(1,--len);
if(len == 1) break;
}
}
int main(){
scanf("%d",&n);
for(int i=1; i<=n; i++){
scanf("%d",&a[i]);
}
HeapSort(n);
for(int i=1; i<=n; i++){
printf("%d ",a[i]);
}
return 0;
}
归并排序
#include<iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
using namespace std;
int a[105],n;
void Merge(int l,int r){
int b[105];
for(int i=l; i<=r; i++) b[i] = a[i];
int mid = (l+r)/2;
int posl=l,posr=mid+1,k=l;
while(posl<=mid && posr<=r){
if(b[posl]<b[posr]){
a[k++] = b[posl++];
}
else{
a[k++] = b[posr++];
}
}
while(posl<=mid) a[k++] = b[posl++];
while(posr<=r) a[k++] = b[posr++];
}
void MergeSort(int l,int r){
if(l == r) return;
int mid = (l+r)/2;
MergeSort(l,mid);
MergeSort(mid+1,r);
Merge(l,r);
}
int main(){
scanf("%d",&n);
for(int i=1; i<=n; i++){
scanf("%d",&a[i]);
}
MergeSort(1,n);
for(int i=1; i<=n; i++){
printf("%d ",a[i]);
}
return 0;
}