5 条题解
-
4
新思路:
归并排序
代码:
# include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int a[N], b[N]; void merge(int l, int mid, int r) { int i = l; int j = mid + 1; int index = l; while (i <= mid && j <= r) { if (a[i] <= a[j]) { b[index] = a[j]; index++; j++; } else { b[index] = a[i]; index++; i++; } } while (i <= mid) { b[index] = a[i]; index++; i++; } while (j <= r) { b[index] = a[j]; index++; j++; } for (int i = l; i <= r; i++) { a[i] = b[i]; } } void mergeSort(int l, int r) { if (l == r) { return; } int mid = (l + r) / 2; mergeSort(l, mid); mergeSort(mid + 1, r); merge(l, mid, r); } int main() { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } mergeSort(1, n); for (int i = n; i >= 1; i--) { printf("%d ", a[i]); } return 0; }
-
1
快排超时,归并可以用
#include<iostream> using namespace std; const int N=1e5+10; int q[N],tmp[N],n; void merge(int l,int r){ if(l>=r) return ; int mid=l+r>>1; merge(l,mid); merge(mid+1,r); int k=0,i=l,j=mid+1; while(i<=mid&&j<=r){ if(q[i]<=q[j]) tmp[k++]=q[i++]; else tmp[k++]=q[j++]; } while(i<=mid) tmp[k++]=q[i++]; while(j<=r) tmp[k++]=q[j++]; for(i=l,j=0;i<=r;i++,j++) q[i]=tmp[j]; } int main(){ cin>>n; for(int i=0;i<n;i++) cin>>q[i]; merge(0,n-1); for(int i=0;i<n;i++) cout<<q[i]<<' '; return 0; }
-
0
经典板子题
#include<iostream> #include<algorithm> using namespace std; int a[100005],n; int main(){ cin>>n; for(int i=0;i<=n-1;i++){ cin>>a[i]; } sort(a,a+n); for(int i=0;i<=n-1;i++){ cout<<a[i]<<" "; } return 0; }
- 1
信息
- ID
- 178
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 250
- 已通过
- 74
- 上传者