0
已解决
李瑞曦
高级天翼
高级天翼
3828 分块排序
经验值:800 时间限制:1000毫秒
题目描述 Description
现在有一个长度为n的正整数序列(10<=n<=20000),现在需要将这个序列分块进行从大到小排序。
例如长度为10的序列,按照每4个数字进行分块,每块的数据进行排序:
1 3 5 4 2 2 9 1 8 7
排序后的结果为:
5 4 3 1
9 2 2 1
8 7
输入描述 Input Description
第一行输入一个正整数n表示序列的长度(10<=n<=20000),以及分块大小m(m<=100)
第二行输入n个空格隔开的正整数(不超过100,000,000)
输出描述 Output Description
按块输出排序后的序列
样例输入 Sample Input
10 4 1 3 5 4 2 2 9 1 8 7
样例输出 Sample Output
5 4 3 1
9 2 2 1
8 7
数据范围及提示 Data Size & Hint
若最后一块数据不够分块大小,仍然当做一个完整分块进行排序。
----------------------------------------------------------------------
为什么我的代码一直输出:
5 4 3 1
9 8 2 1
8 7
????
求大佬找错
我的代码:
#include<iostream>
#include<algorithm>
using namespace std;
int a[111111],b[11];
int main(){
int n;
int m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int cnt=1;
for(int i=1;i<=n;i++){
if(cnt==m+1){
sort(b+1,b+m+1);
for(int j=m;j>=1;j--){
cout<<b[j]<<" ";
}
cout<<endl;
cnt=1;
}
else{
b[cnt]=a[i];
//cout<<a[i]<<endl;
cnt++;
}
}
sort(a+n-n%m,a+n+1);
for(int i=n;i>n-n%m;i--){
cout<<a[i]<<" ";
}
}
李瑞曦在2021-04-23 19:06:40追加了内容
ding
李瑞曦在2021-04-23 19:21:19追加了内容
ding
李瑞曦在2021-04-23 19:34:49追加了内容
ding
李瑞曦在2021-04-23 19:43:14追加了内容
you ren ma
李瑞曦在2021-04-23 20:22:32追加了内容
啊啊啊
李瑞曦在2021-04-23 20:50:56追加了内容
有人么
李瑞曦在2021-04-23 21:05:43追加了内容
唉
李瑞曦在2021-04-23 21:43:53追加了内容
顶
李瑞曦在2021-04-24 09:10:40追加了内容
@张帆 是这样吗?
90分啊
#include<iostream>
#include<algorithm>
using namespace std;
int a[1111111],b[11],t[1111111];
int main(){
int n, m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int cnt=0;//当前块中元素的下标
for(int i=1;i<=n;i++){
if(cnt==m){//当下标达到m+1时,说明一块已经结束了
sort(b+1,b+m+1);
for(int j=m;j>=1;j--){//因为是从小到大排序的,所以要倒序输出
cout<<b[j]<<" ";
}
cout<<endl;
cnt=0;//下标要重新计数
}
b[++cnt]=a[i];
//cout<<a[i]<<endl;
//cnt++;
}
sort(a+n-n%m+1,a+n+1);
for(int i=n;i>=n-n%m+1;i--){//输出剩下的数
cout<<a[i]<<" ";
}
}