有若干数据,现需进行重新排序,排序的规则是:将其中的非零值移至开始(保持原来的顺序不变),而零值移至末尾。
输入格式:
第一行一个整数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; }