C语言面试题总结

编程题

某大厂的一个编程题,在这里写出来和大家探讨一下,也算是自己总结一下经验,好了,废话不多说,直接上题。

.有10个节目,节目分为TV和RADIO两类,统一编号,现在要求将这些节目按顺序分为两类存放。
(此题主要是对这些节目进行分类和排序,我个人认为有以下问题需要注意:
1.应该先分类还是先排序?
2.能否分配一些空间临时存放TV和RADIO?
3.分类排序算法应该用哪种?
我想的是先分类再排序的方法,将一个完整的节目表分为两个表,再对两个表进行排序,如果不是必须的话,最好不要分配多的空间,排序用的是冒泡(ps:那时候没有看过排序算法,只知道冒泡,后来看过快排,希尔,二叉树排序,很惊讶,懂算法是一件多么炫酷的事情))

以下是代码,希望多多指教

#include<stdio.h>

enum{
	TYPE_TV,
	TYPE_RADIO,
	TYPE_NONE
};

typedef struct _Service
{
	unsigned char u8ServiceType;
	unsigned int u32ServiceNumber;
}Service;

void Swap(Service *a,Service *b)
{
	Service temp;
	
	temp = *a;
	*a = *b;
	*b = temp;
}

void BubbleSort(Service *data,unsigned int num)
{
	unsigned int i = 0;
	unsigned int j = 0;
	
	for(i=0;i<num-1;i++)
	{
		for(j=0;j<num-i-1;j++)
		{
			if(data[j].u32ServiceNumber > data[j+1].u32ServiceNumber)
				Swap(&data[j],&data[j+1]);
		}
	}
}

void Service_Sort(Service *Program,unsigned char Num)
{
    unsigned char u8TVNum = 0;
    unsigned char i = 0;
	unsigned char j = 0;

    //TV and  Radio
	i = 0;
	j = Num;
	
	while(i<j)
	{
		if(Program[i].u8ServiceType == TYPE_RADIO)
		{
			if(Program[j].u8ServiceType == TYPE_TV)
			{
				Swap(&Program[i],&Program[j]);
				i++;
				j--;
			}
			else
			{
				j--;
			}
		}
		else
		{
			i++;
		}
	}
	u8TVNum = i;

    //bubble sort
    BubbleSort(Program,u8TVNum);
    BubbleSort(Program+u8TVNum,(Num-u8TVNum));
}

int main(void)
{
	Service a[10] = {
		{TYPE_TV,10},
		{TYPE_RADIO,1},
		{TYPE_RADIO,3},
		{TYPE_RADIO,15},
		{TYPE_TV,9},
		{TYPE_TV,5},
		{TYPE_RADIO,11},
		{TYPE_TV,27},
		{TYPE_TV,33},
		{TYPE_TV,88},
	};
		
	int i = 0;
	for(i=0;i<10;i++)
	{
		printf("%d %d\n",a[i].u8ServiceType,a[i].u32ServiceNumber);
	}
	
	Service_Sort(a,10);

	for(i=0;i<10;i++)
	{
		if(a[i].u8ServiceType == TYPE_TV)
			printf("TYPE_TV %d\n",a[i].u32ServiceNumber);
		else
			printf("TYPE_RADIO %d\n",a[i].u32ServiceNumber);
	}

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值