快速排序
#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N];
void qsort(int left, int right) {
if(left > right) return ;
int l = left, r = right;
int mid = a[l + r >> 1];
while(l <= r) {
while(a[l] < mid) l++;
while(a[r] > mid) r--;
if(l <= r) swap(a[l++], a[r--]);
}
qsort(left, r), qsort(l, right);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
qsort(0, n - 1);
for(int i = 0; i < n; i++) cout << a[i] << ' ';
return 0;
}
堆排序
#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N];
void qsort(int left, int right) {
if(left > right) return ;
int l = left, r = right;
int mid = a[l + r >> 1];
while(l <= r) {
while(a[l] < mid) l++;
while(a[r] > mid) r--;
if(l <= r) swap(a[l++], a[r--]);
}
qsort(left, r), qsort(l, right);
}
int main() {
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++) cin >> a[i];
qsort(0, n - 1);
for(int i = 0; i < m; i++) cout << a[i] << ' ';
return 0;
}
归并排序
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N], b[N];
void merge_sort(int left, int right){
if(left >= right) return;
int mid = left + right >> 1;
int l1 = left, r1 = mid, l2 = mid + 1, r2 = right;
merge_sort(l1, r1), merge_sort(l2, r2);
int k = 0;
while(l1 <= r1 && l2 <= r2){
if(a[l1] < a[l2]) b[k++] = a[l1++];
else b[k++] = a[l2++];
}
while(l1 <= r1) b[k++] = a[l1++];
while(l2 <= r2) b[k++] = a[l2++];
for(int i = left, j = 0; i <= right; i++, j++){
a[i] = b[j];
}
}
int main(){
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
merge_sort(1, n);
for(int i = 1; i <= n; i++) printf("%d ", a[i]);
return 0;
}
桶排序
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n]={},b[1001]={};
for(int i=0;i<n;i++)
{
cin>>a[i];
b[a[i]]++;
}
for(int i=1;i<=1000;i++)
{
if(b[i]>0)cout<<i<<' ';
}
}
冒泡排序
#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N];
int main(){
int n;
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
for (int i = 1; i <= n; i ++ ){
for (int j = 1; j <= n; j ++ ){
if (a[i] > a[j]) swap(a[i], a[j]);
}
}
for(int i = 1; i <= n; i ++ ) cout << a[i] << " ";
return 0;
}