编程题
某大厂的一个编程题,在这里写出来和大家探讨一下,也算是自己总结一下经验,好了,废话不多说,直接上题。
一.有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;
}