首页 > 编程语言 > 详细

排序小结

时间:2021-05-30 00:57:44      阅读:14      评论:0      收藏:0      [点我收藏+]

1.快速排序(手写)

#include <bits/stdc++.h>
using namespace std;
int n, a[100005]; 
void quick_sort(int left, int right, int a[]) {
	if (left >= right) return ;
	int x = a[(left + right) / 2];
	int i = left, j = right;
	while (i <= j) {
		while (a[i] < x) ++i;
		while (a[j] > x) --j;
		if (i <= j) swap(a[i++], a[j--]);
	}
	quick_sort(left, j, a);
	quick_sort(i, right, a);
}
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) scanf("%d", a + i);
	quick_sort(1, n, a);
	for (int i = 1; i <= n; ++i) printf("%d ", a[i]);
	return 0;
}

2.快速排序(sort)
大家都会
3.归并排序

#include <bits/stdc++.h>
using namespace std;
int n, a[100005], tmp[100005];
void merge_sort(int a[], int left, int right) {
    if (left >= right) return ;
    int mid = left + right >> 1;
    merge_sort(a, left, mid), merge_sort(a, mid + 1, right);
    int tt = 0, i = left, j = mid + 1;
    while (i <= mid && j <= right) {
        if (a[i] < a[j]) tmp[++tt] = a[i++];
        else tmp[++tt] = a[j++];
    }
    while (i <= mid) tmp[++tt] = a[i++];
    while (j <= right) tmp[++tt] = a[j++];
    for (int i = left, t = 1; i <= right; ++i, ++t) a[i] = tmp[t];
}
int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) scanf("%d", a + i);
    merge_sort(a, 1, n);
    for (int i = 1; i <= n; ++i) printf("%d ", a[i]);
    return 0;
}

4.基数排序
时间复杂度为O(n)

#include <bits/stdc++.h>
using namespace std;
int n, a[100010], b[100010], num[100010];
int main() {
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		scanf("%d", a + i);
		++num[a[i] % 100000];
	}
	for(int i = 1; i < 100000; ++i) num[i] += num[i - 1];
	for (int i = n; i; --i) b[num[a[i] % 100000]--] = a[i];
	
	memset(num, 0, sizeof num);
	for (int i = 1; i <= n; ++i) ++num[b[i] / 100000];
	for (int i = 1; i <= 10000; ++i) num[i] += num[i - 1];
	for (int i = n; i; --i) a[num[b[i] / 100000]--] = b[i];
	for (int i = 1; i <= n; ++i) printf("%d ", a[i]);
	return 0;
}

5.桶排序
大家都会

排序小结

原文:https://www.cnblogs.com/cyyhhyyc/p/14826224.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!