2 条题解
-
1
朴素做法
#include <bits/stdc++.h> using namespace std; int n; int a[1005]; int b[1005]; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; b[i] = i; } //用选择排序对下标排序 for (int i = 1; i <= n; i++) for (int j = i + 1; j <= n; j++) if (a[b[i]] > a[b[j]]) swap(b[i], b[j]); for (int i = 1; i <= n; i++) cout << b[i] << " "; return 0; }
自定义比较函数
#include <bits/stdc++.h> using namespace std; int n; int a[1005]; int b[1005]; bool cmp(int x, int y) { return a[x] < a[y]; } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; b[i] = i; } //用选择排序对下标排序 for (int i = 1; i <= n; i++) for (int j = i + 1; j <= n; j++) if (!cmp(b[i], b[j])) swap(b[i], b[j]); for (int i = 1; i <= n; i++) cout << b[i] << " "; return 0; }
-
0
既然有sort为什么要自己敲排序呢由于不需要考虑重复关键字,所以可以直接使用sort排序而非stable_(稳定的sort)sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include的c++标准库中。——百科
sort大法好
#include<bits/stdc++.h> using namespace std; struct sz { int a,b; }px[2010];//a为每一个数的数值,b为下标 bool cmp(sz x,sz y) { return x.a<y.a; }//cmp函数返回排序最终状态,即'<' int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>px[i].a; px[i].b=i; }//赋值 赋下标 sort(px+1,px+1+n,cmp);//排序主体 for(int i=1;i<=n;i++) cout<<px[i].b<<" "; return 0; }
- 1
信息
- ID
- 1072
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 85
- 已通过
- 58
- 上传者