作业帮 > 综合 > 作业

将数组中的非零元素移到前面来,零元素移到后面去,各非零元素间的相对位置不变 C语言

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/12 05:57:09
将数组中的非零元素移到前面来,零元素移到后面去,各非零元素间的相对位置不变 C语言
两种方法:从前边往后检查每一个元素,如果发现某元素为零,就将它后面的所有的元素顺序前移动一位; 找到第一个零元素v[i],从i+1开始,往后检查每个元素v[j],若v[j]不是零,就将v[j]存入v[i]中,再将
//v[j]设置为0,并令i+1,在检查了v[n]后,结束算法
/*
整理前 :
30 0 45 -20 16 0 8 0 6 13 0 12 -37 -9 18
整理后 :
30 45 -20 16 8 6 13 12 -37 -9 18 0 0 0 0
Press any key to continue
*/
#include <stdio.h>

void Change(int a[], int n) {
\x09int i,j;
\x09for(i = 0; i < n - 1; ++i) {
\x09\x09if(a[i] == 0) {
\x09\x09\x09for(j = i; j < n - 1; ++j)
\x09\x09\x09\x09a[j] = a[j + 1];
\x09\x09\x09a[n - 1] = 0;
\x09\x09}
\x09}
}

void Show(int a[], int n) {
\x09int i;
\x09for(i = 0; i < n; ++i)
\x09\x09printf("%d ",a[i]);
\x09printf("\n");
}

int main() {
\x09int a[] = {30,0,45,-20,16,0,8,0,6,13,0,12,-37,-9,18};
\x09int n = sizeof(a)/sizeof(a[0]);
\x09printf("整理前 :\n");
\x09Show(a,n);
\x09Change(a,n);
\x09printf("整理后 :\n");
\x09Show(a,n);
\x09return 0;
}