问题描述:
del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数的原型为:
int del (int a[10],int n,int x)
(1)请实现这个函数,并完成测试。
(2)如果在函数调用时,要求数组中的元素呈升序排列呢?
#include "stdafx.h"
int del(int a[], int n, int x);
void single_del(int a[], int n, int x);
void sort(int a[], int n);
void show_array(int a[], int n);
int main()
{
int n;
int a[] = { 27, 61, 49, 88, 4, 20, 28, 31, 49, 42, 62, 49, 64, 14, 88, 27, 73 };
n = del(a, 17, 49);
show_array(a, n);
printf("\n");
sort(a,n);
show_array(a, n);
return 0;
}
int del(int a[], int n, int x)
{
int dele_time(0);
for (int i = 0; i < n; i++)
{
if (a[i] == x)
{
dele_time++;
}
}
for (int i = 0; i < dele_time; i++)
{
single_del(a, n, x);
n--;
}
return n;
}
void single_del(int a[], int n, int x) //★★★
{
int seri;
for (int i = 0; i < n; i++)
{
if (a[i] == x)
{
seri = i;
break;
}
}
for (int i = seri; i < n-1; i++)
{
a[i] = a[i + 1];
}
}
void sort(int a[], int n) //选择排序算法
{
int i, j, med;
for ( i = 0; i < n-1; i++)
{
int k = i;
for ( j = i+1; j < n; j++)
{
if (a[j]<a[k])
{
k = j;
}
}
med = a[i];
a[i] = a[k];
a[k] = med;
}
}
void show_array(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
}
=