【C语言及程序设计】项目2-26-2:删除数组元素与数组排序

问题描述

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]);
	}
}

  

 

 

 

 

=

posted @ 2018-07-18 22:35  Miyazakehime  阅读(316)  评论(0编辑  收藏  举报