桶排序过程模拟

xiaoxiao2021-02-28  15

桶排序, 可以理解成开一个数组当做桶,将数据放入不同的桶中,最后从小到大输出桶的编号 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAXN = 10005; const int INF = 0x3f3f3f3f; int num[MAXN]; int tong[MAXN]; void P(int n) { int MAX = -INF; int MIN = INF; for(int i = 1; i <= n; i++) { tong[num[i]]++; if(num[i] > MAX) MAX = num[i]; if(num[i] < MIN) MIN = num[i]; } int k = 1; for(int i = MIN; i <= MAX; i++) if(tong[i] != 0) for(int j = tong[i]; j > 0; j--) num[k++] = i; } int main() { int n; while(~scanf("%d", &n)) { memset(num, 0, sizeof(num)); memset(tong, 0, sizeof(tong)); for(int i = 1; i <= n; i++) scanf("%d", &num[i]); P(n); for(int i = 1; i <= n; i++) printf("%d ", num[i]); printf("\n"); } return 0; }

加了MAX,和MIN,记录数据的最大值和最小值,减少遍历桶时的损耗

转载请注明原文地址: https://www.6miu.com/read-2602597.html

最新回复(0)