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

xiaoxiao2021-02-28  39

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

 

输入格式:

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

转载请注明原文地址: https://www.6miu.com/read-1000014.html

最新回复(0)