题目:1177:奇数单增序列
题目描述:
给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。
输入:
第1行为 N;
第2行为 N 个正整数,其间用空格间隔。
输出:
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
时空限制
1s / 64 MB
样例输入:
10
1 3 2 6 5 4 9 8 7 10
样例输出:
1,3,5,7,9
代码1:快速排序
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=500+10;
int n,x,a[N],k;
void quick_sort(int l,int r){
if(l>=r) return;
int x=a[(l+r)/2];
int i=l-1,j=r+1;
while(i<j){
do i++;while(a[i]<x);
do j--;while(a[j]>x);
if(i<j) swap(a[i],a[j]);
}
quick_sort(l,j);
quick_sort(j+1,r);
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
if(x%2!=0) a[k++]=x;
}
n=k;
quick_sort(0,n-1);
for(int i=0;i<n-1;i++) printf("%d,",a[i]);
printf("%d",a[n-1]);
return 0;
}
代码2:归并排序
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=500+10;
int n,x,a[N],k,tmp[N];
void merge_sort(int l,int r){
if(l>=r) return;
int mid=l+r >>1;
merge_sort(l,mid);
merge_sort(mid+1,r);
int i=l,j=mid+1,k=0;
while(i<=mid&&j<=r){
if(a[i]<=a[j]) tmp[k++]=a[i++];
else tmp[k++]=a[j++];
}
while(i<=mid) tmp[k++]=a[i++];
while(j<=r) tmp[k++]=a[j++];
for(int i=l,k=0;i<=r;i++,k++) a[i]=tmp[k];
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
if(x%2!=0) a[k++]=x;
}
n=k;
merge_sort(0,n-1);
for(int i=0;i<n-1;i++) printf("%d,",a[i]);
printf("%d",a[n-1]);
return 0;
}
代码3:选择排序
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=500+10;
int n,x,a[N],k;
void select_sort(int l,int r){
for(int i=0;i<n-1;i++){
k=i;
for(int j=i+1;j<n;j++)
if(a[j]<a[k]) k=j;
if(k!=i) swap(a[k],a[i]);
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
if(x%2!=0) a[k++]=x;
}
n=k;
select_sort(0,n-1);
for(int i=0;i<n-1;i++) printf("%d,",a[i]);
printf("%d",a[n-1]);
return 0;
}
代码4:冒泡排序
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=500+10;
int n,x,a[N],k;
void bubble_sort(int l,int r){
bool f;
for(int i=0;i<n-1;i++){
f=true;
for(int j=0;j<n-1-i;j++)
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
f=false;
}
if(f) break;
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
if(x%2!=0) a[k++]=x;
}
n=k;
bubble_sort(0,n-1);
for(int i=0;i<n-1;i++) printf("%d,",a[i]);
printf("%d",a[n-1]);
return 0;
}
代码5:插入排序
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=500+10;
int n,x,a[N],k;
void insert_sort(int l,int r){
for(int i=1;i<n;i++){
int key=a[i];
int j=i-1;
while(j>=0&&a[j]>key){
a[j+1]=a[j];
j--;
}
a[j+1]=key;
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
if(x%2!=0) a[k++]=x;
}
n=k;
insert_sort(0,n-1);
for(int i=0;i<n-1;i++) printf("%d,",a[i]);
printf("%d",a[n-1]);
return 0;
}
结果
