对于字符数组怎么排序一点头绪都没有,各位高手帮下忙

shiyiceng 2009-08-02 09:47:35
题目是这样的:
写几个函数:(1)输入10个职工的姓名和职工号
(2)按职工号由小到大顺序排序,姓名顺序也随之调整
(3)要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名

...全文
107 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qepjatdwj 2009-08-03
  • 打赏
  • 举报
回复
排序有qsort,查找有bsearch,为何不用呢
xueshanpiaoying 2009-08-03
  • 打赏
  • 举报
回复
/**************************************************************
写几个函数:(1)输入10个职工的姓名和职工号 *
(2)按职工号由小到大顺序排序,姓名顺序也随之调整 *
(3)要求输入一个职工号,用折半查找法找出该职工的姓名 *
从主函数输入要查找的职工号,输出该职工姓名 *
*
**************************************************************/

#include<stdio.h>
#include<stdlib.h>
#define NUM 5


typedef int data;

struct work {
char name;
data id;
} work[5] = {{101,"wangbiyan"},{105,"licuiping"},
{103,"lanyangyang"},{104,"feiyangyang"},
{102,"xiyangyang"}};




void rank(struct work work[NUM]) {
int i,j,k;
struct work tmp;
for(i = 0; i < NUM -1; i ++) {
for(j = NUM - 1; j > i; j --) {
if(work[j - 1].id < work[j].id) {
tmp = work[j - 1];
work[j - 1] = work[j];
work[j] = tmp;
}
}
}
return 0;

}

int bitsearch(struct work work[NUM],int k) {
int low = 0,high = NUM - 1,mid;
while (low <= high) {
mid = (low + high)/2;
if(work[mid].id == k)
return mid;
if(work[mid].id > k)
high = mid - 1;
else
low = mid + 1;

}
return -1;
}

void print(struct work work[NUM]) {
int i;
for(i = 0; i < NUM-1; i ++) {
printf("%d\n,%s",work[i].id,work[i].name);
printf("\n");
}
}



int main() {
struct work work[NUM];
print(work);
rank(work);
print(work);
bitsearch(work,103);

}

还是有点小问题,哪个高手能帮忙指出问题出现在哪?
huangbo0603 2009-08-02
  • 打赏
  • 举报
回复
兄台有时间发给你
qepjatdwj 2009-08-02
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct person
{
char last[16];
char first[11];
char phone[13];
int age;
};

static int comp(const void *,const void *);
int main()
{
int i;
struct person *p;
static struct person key={"","","555-1965",0};
static struct person people[]=
{
{"Ford","Henry","555-1903",98},
{"Lincoln","Abraham","555-1865",161},
{"Ford","Edsel","555-1965",53},
{"Trump","Donald","555-1988",49}
};

qsort(people,4,sizeof people[0],comp);
p=(struct person *)bsearch(&key,people,4,sizeof people[0],comp); //
if(p!=NULL)
{
printf("%s, %s, %s, %d\n",p->last,p->first,p->phone,p->age);
}
else
puts("Not found");
return 0;
}
static int comp(const void *x,const void *y)
{
struct person *p1=(struct person *) x;
struct person *p2=(struct person *) y;
return strcmp(p1->phone,p2->phone);
//return strcmp((struct person *)x->phone,(struct person *)y->phone);
}

qepjatdwj 2009-08-02
  • 打赏
  • 举报
回复
定义一个结构体,用qsort对结构体进行排序,bsearch进行折半查找。
zjw6861982 2009-08-02
  • 打赏
  • 举报
回复
自己先写个想法,再让别人给你改!
别总想不劳而获
shiyiceng 2009-08-02
  • 打赏
  • 举报
回复
不要用指针,最好给我一个完整的程序
ljt3969636 2009-08-02
  • 打赏
  • 举报
回复
map比较合适不过是C估计不让用 或者 结构体数组,折半查找细节已经还给老师了.....

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧