将数列中的非零值移至开始(保持原来的顺序不变),而零值移至末尾

来源:互联网 发布:冠能狗粮网络代理 编辑:程序博客网 时间:2024/06/04 18:50


有若干数据,现需进行重新排序,排序的规则是:将其中的非零值移至开始(保持原来的顺序不变),而零值移至末尾。

 

输入格式:

第一行一个整数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) {intx=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;}




阅读全文
0 0