问题描述
- 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("
The list before sorting:
");
p=head->next;
if (p==NULL)printf("
The list is NULL!
");
else
{ printf("
Head");
do
{
printf("->%d",p->data);p=p->next;
} while(p!=NULL);
printf("->End
");
}sort(head);
printf("
The list after sorting:
");
p=head->next;
if (p==NULL)printf("
The list is NULL!
");
else
{ printf("
Head");
do
{
printf("->%d",p->data);p=p->next;
} while(p!=NULL);
printf("->End
");
}
}
/
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
*/
解决方案
解决方案二:
冒泡,只对相邻比较,交换
选择,选一个最大(最小)值,多次比较,一次交换
解决方案三:
冒泡我就不拍了,主要区别就是,选择排序需要设置一个哨兵,就像打擂台,上来先给个值,然后比较,谁更小,或者谁更大,就替换,直到最后结束;冒泡就是相邻元素比较然后替换,逐次进行,就像泡泡,这回你明白了吧,你的代码,在我手机上看是一堆密密麻麻的,没法仔细瞧…望采纳