coco1312 2015-09-22 06:46 采纳率: 0%
浏览 2448

C语言选择排序法和冒泡法区别问题

编程实现将给定的一组整数采用选择排序法按由小到大的顺序排序。要求:
1) 编写函数create()根据已知整数数组构造一个单链表,假设结点只有一个整数数据域。
2) 编写函数sort()采用选择排序方法对已知链表进行排序。
3) 在主函数中完成数据的输入与结果的输出。
===我自己写了一个程序,但是不确定选择排序法是什么,求大侠帮忙看下我写的代码sort()是选择排序吗?感觉自己混淆了选择排序法和冒泡排序了,求教如何区别?
#include
#include
typedef struct list
{ int data;
struct list next;
} SLIST;
SLIST *creat(int *a)
{ SLIST *h,*p,*q; int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0; i { q=(SLIST *)malloc(sizeof(SLIST));
q->data=a[i]; p->next=q; p=q;
}
p->next=0;
return h;
}
void sort(SLIST *h)
{ SLIST *p, *q; int t;
p = h ;
while (p) {
q = p->next ;
while (q) {
if (p->data> q->data)
{

t = p->data;

p->data = q->data;

q->data = t;

}
q = q->next;
}
p = p->next;
}
}
main()
{ SLIST *head,*p;

int a[8]={11,10,25,18,29,22,15,19};
head=creat(a);
printf("\nThe list before sorting:\n");
p=head->next;
if (p==NULL)

printf("\nThe list is NULL!\n");
else
{ printf("\nHead");
do
{
printf("->%d",p->data);

p=p->next;

} while(p!=NULL);
printf("->End\n");
}

sort(head);
printf("\nThe list after sorting:\n");
p=head->next;
if (p==NULL)

printf("\nThe list is NULL!\n");
else
{ printf("\nHead");
do
{
printf("->%d",p->data);

p=p->next;

} while(p!=NULL);
printf("->End\n");
}
}
/

1.程序运行结果为:
The list before sorting:

Head->11->10->25->18->29->22->15->19->End

The list after sorting:

Head->10->11->15->18->19->22->25->29->End
*/

  • 写回答

2条回答 默认 最新

  • 另一花生 2015-09-22 14:57
    关注

    冒泡我就不拍了,主要区别就是,选择排序需要设置一个哨兵,就像打擂台,上来先给个值,然后比较,谁更小,或者谁更大,就替换,直到最后结束;冒泡就是相邻元素比较然后替换,逐次进行,就像泡泡,这回你明白了吧,你的代码,在我手机上看是一堆密密麻麻的,没法仔细瞧…望采纳图片说明图片

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器