已知整型数组a中有若干元素的值为零,编写函数int func(int *a, int n),将a中的零移至数组后面,非零整数移至数组前面并从小到大排序。形参n表示数组中元素的个数,函数返回原数组中第一个值为零的元素的下标。在main函数中调用该函数。
#include <stdio.h>
int func(int *a, int n);
int main(){
int i,n;
printf("请输入数组元素个数:\n");
scanf("%d", &n);
int a[n];
printf("请输入数组元素:\n");
for(i = 0;i < n;i++){
scanf("%d",&a[i]);
}
int index = func(a, n);
printf("排序后的数组:\n");
for(i = 0;i < n;i++){
printf("%d ",a[i]);
}
printf("\n原数组中第一个0的下标是%d",index);
}
int func(int *a, int n){
int i,j,index = -1;
for(i = 0;i < n;i++){
if(a[i] == 0){
index = i;
break;
}
}
for(i = 0;i < n-1;i++){
for(j = 0;j < n-1-i;j++){
if(a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
int cnt = 0;
for(i = 0;i < n;i++){
if(a[i] == 0){
cnt ++;
}
}
for(i = 0;i < n;i++){
if(a[i] == 0){
for(j = i;j < n - cnt;j++){
a[j] = a[j + cnt];
}
for(j = n - cnt;j < n;j++){
a[j] = 0;
}
break;
}
}
return index;
}
#include <stdio.h>
int func(int *a, int n){
int p=0;
int t=n-1;
int tmp;
int i,j;
while(p<=t){
if(a[p]==0){
tmp=a[t];
a[t]=a[p];
a[p]=tmp;
t--;
}
else{
tmp=a[p];
for(i=p-1;i>=0;i--){
if(a[i]>tmp){
a[i+1]=a[i];
}
else break;
}
a[i+1]=tmp;
p++;
}
}
return t+1;
}
int main(void) {
int a[1000],i,n;
//输入n
scanf("%d",&n);
//输入n个数
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int res = func(a,n);
printf("第一个值为零的元素的下标:%d\n",res);
printf("排序后的数组:");
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
有用请采纳
#include<stdio.h>
int func(int* a, int n);
void mpSort(int *a, int n);
int main(){
int n; // n个数
scanf("%d", &n);
int a[n]; // 输入 n个数
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
printf("第一个零索引 = %d\n", func(a, n));
// for(int i = 0; i < n; i++) // 输出最终结果
// printf("%d ", a[i]);
}
int func(int* a, int n){
bool flag = true;
int index; // 第一个0的位置
int count = 0; // 统计零的个数
int temp[n]; // 用于暂存非零元素
int k = 0;
for (int i = 0; i < n; i++){
if (flag && a[i] == 0){
index = i;
flag = false;
}
if (a[i] == 0) // 统计零的个数
count += 1;
else
temp[k++] = a[i];
}
mpSort(temp, n - count);
int i;
for(i = 0; i < n - count;i++)
a[i] = temp[i];
for(; i < n; i++)
a[i] = 0;
return index;
}
void mpSort(int* a, int n){ // 排序 , n为元素个数
int temp;
for(int i = 0; i < n - 1; i++){
for (int j = 0; j < n - i - 1; j++){
if(a[j] > a[j + 1]){
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
我这个应该能用吧!