有若干数据,现需进行重新排序,排序的规则是:将其中的非零值移至开始(保持原来的顺序不变),而零值移至末尾。
输入格式:
第一行一个整数n,表示数据的个数。
第二行n个整数,待排序的数
输出格式:
n个排好序的整数,每个整数之间以空格分割。
输入样例:
7
2 1 0-3 0 5 8
输出样例:
2 1 -3 5 8 0 0
编程要求:
该程序由两个函数main和 sort构成。
#include <stdio.h>
#include <stdio.h>
void sort(int a[],int n) {
int i;
int m=n;
while(n>1) {
for(i=0; i<n-1; i++) {
if (a[i]==0) {
int x=a[i];
a[i]=a[i+1];
a[i+1]=x;
}
}
n--;
}
for(i=0; i<m; i++) {
printf("%d",a[i]);
if(i!=m-1) printf(" ");
}
}
int main() {
int n,i ;
scanf("%d",&n);
int a[n];
for(i=0; i<n; i++) {
scanf("%d",&a[i]);
}
sort(a,n);
return 0;
}
#include <stdio.h>
#include<malloc.h>
void sort(int *p,int n) {
int i,j, k,*q;
q=(int *)malloc(n*sizeof(int));
for (i=0,j=0,k=n-1; i<n; i++) {
if(*(p+i)!=0) {
*(q+j)=*(p+i);
j++;
} else {
*(q+k)=*(p+i);
k--;
}
}
for(i=0; i<n; i++) {
*(p+i)=*(q+i);
free(q);
}
int main() {
int n,i,*a;
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
for(i=0; i<n; i++)
scanf("%d",a+i);
sort(a,n);
for(i=0; i<n; i++) {
printf("%d",*(a+i));
if(i!=n-1) printf(" ");
}
return 0;
}