9 条题解
-
2
计数排序的原理就是把所有的数按照数值进行归类,再按照顺序依次把归类好的数输出,其中要注意的是cnt数组长度需要定义为输入数据的最大值。 @ hetao1802625你是抄 @ Super Fridge 的代码吧😕 ~
#include <bits/stdc++.h> using namespace std; int n,a[100005]; int main() { cin>>n; for(int i = 1;i <= n;i++) { cin >> a[i]; } sort(a + 1,a + n + 1); for(int i = 1;i <= n;i++) { cout << a[i] << ' '; } }
-
2
解析
计数排序的原理就是把所有的数按照数值进行归类,再按照顺序依次把归类好的数输出,其中要注意的是cnt数组长度需要定义为输入数据的最大值。
题解
// 定义,输入 int a[50005]; int n; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; // 排序_start int cnt[1005]; // 计数,cnt[i]是i出现的次数 // 清零 for (int i = 1; i <= 1000; i++) cnt[i] = 0; // 计数 for (int i = 1; i <= n; i++) cnt[a[i]]++; // 当前的数(a[i])出现的次数(cnt[a[i]])加1 // 排序_end // 输出_start for (int i = 1; i <= 1000; i++) { while (cnt[i] > 0) { // 当前的数(i)的个数(cnt[i])还有的话 cout << i << " "; cnt[i]--; // 输出了一个i,cnt[i]少一个 } } // 输出_end
-
0
不是我不喜欢其它排序,只是
Accepted 0ms 7696KiB
#include <iostream> using namespace std; int n, a[100005], t[100005]; void MergeSort(int l, int r) { if (l == r) return; int mid = (l + r) / 2; MergeSort(l, mid); MergeSort(mid+1, r); int pl = l; int pr = mid + 1; int pt = l; while (pl <= mid && pr <= r) { if (a[pl] <= a[pr]) t[pt++] = a[pl++]; else t[pt++] = a[pr++]; } while (pl <= mid) t[pt++] = a[pl++]; while (pr <= r) t[pt++] = a[pr++]; for (int i = l; i <= r; i++) a[i] = t[i]; } int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; MergeSort(1, n); for (int i = 1; i <= n; i++) cout << a[i] << " "; return 0; }
-
0
课上的原题+a数组开大一点=AC code
#include <bits/stdc++.h> using namespace std; int n, a[100000005]; void qsort(int l, int r) { int x = a[(l + r) / 2]; int i = l; int j = r; while(i <= j) { while(a[i] < x) { i++; } while(a[j] > x) { j--; } if(i <= j) { swap(a[i],a[j]); i++; j--; } } if(l < j) { qsort(l,j); } if(i < r) { qsort(i,r); } } int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; qsort(1, n); for (int i = 1; i <= n; i++) cout << a[i] << " "; return 0; }
- 1
信息
- ID
- 486
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 413
- 已通过
- 212
- 上传者