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

编程实现将给定的一组整数采用选择排序法按由小到大的顺序排序。要求:
1) 编写函数create()根据已知整数数组构造一个单链表,假设结点只有一个整数数据域。
2) 编写函数sort()采用选择排序方法对已知链表进行排序。
在主函数中完成数据的输入与结果的输出。
===我自己写了一个程序,但是不确定选择排序法是什么,求大侠帮忙看下我写的代码sort()是选择排序吗?感觉自己混淆了选择排序法和冒泡排序了,求教如何区别?
#include <stdio.h>
#include <stdlib.h>
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<8; 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
*/

冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端。而选择排序的思想也很直观:每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序。
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言中冒泡排序法和选择排序法有哪些不同
1、冒泡排序法:一趟一趟的将两个相邻的数进行交换如果有10个数则需要排9躺,如果是从 大到小输出则需要每次将后一个数和前一个数进行比较将较大的数赋值给钱一个数,将较小的数赋值给后一个数,其实就是两个数交换,那么第一趟交换完毕后,最 小的数便出现在了数组的最后面,然后进行第二趟...

C语言 冒泡排序法和选择法的不同,本质区别
但通常,选择排序更快一点

c语言中起泡法和选择法有什么不同,急!,谢谢!
两者最大的区别在于算法本身。起泡法(冒泡法)是相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。选择法是每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行...

C语言 冒泡排序法和选择法的不同,本质区别
那就简单点。选择就是原来的第一个元素和后面的所有元素进行一次比较后再用原来的第二个元素和除原来第一个元素以外的所有元素进行一次比较。冒泡就是相邻的两个元素进行比较,一直到遍历一次数组所有元素才结束、。 也可以这样想,选择排序就是每一次遍历数组的时候都将数组元素最大或者最小的元素按数组...

c语言选择排序法和冒泡排序法有什么区别
通过这两个程序,可以发现他们的编程还是有些区别的,但是总结下:相同点:1.都要通过n-1组排出具有n个数的顺序;2.都是通过逐个相比,比出最值的;。。。不同点:1.冒泡法,顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换;而选择法,是假定了一个最值,所以最...

冒泡法和选择排序法有什么不同?最好举下例子
冒泡排序和选择排序都是稳定的排序方法。不同的地方是处理的过程不一样。冒泡是相邻的两两比较,把小的交换上去,每一趟比较都会得到一个最小值。一个一个的就像是冒泡一样,比较形象。如果在一趟比较中,没有发现要交换的数值,则排序完成。选择排序是从待排序队列中选出最小的值,放到已排序队列的...

选择排序 冒泡排序 C语言
1、 冒泡排序:外层循环一共进行9次,第一次将10排到最后,这一步要经很9步交换,即将10依次和9,8,7……交换,成为如下顺序:9,8,7,6,5,4,3,2,1,10;接着第二次将9排到倒数第二,这一步要经过8步交换,变成如下顺序:8,7,6,5,4,3,2,1,9,10;同理执行共九大步,即可将它们最终...

在c语言编程中如何将1-10的数从小到大排列。
冒泡法!在我们写程序的时候,通常都会对一组数据进行排序,常用的方法有冒泡法和选择法,我主要写下我对冒泡法的理解和心得。冒泡法:顾名思义,就是把小的数据向前排,也就是向上浮起,并因此进行排序。例:include "stdio.h" 包含头文件 void main() 主函数 { int a[10],t,i,j; 定义要...

选择排序法C语言问题
选择排序法是将第一个数默认为最小值,然后将它后面的数和它进行比较,如果有数比它小,用min_k记录这个较小数的下标,min等于这个数,然后接着向后比较,(注意后面的数一直和min比较)一直到最后一个数也比较完,这时i=n,min记录的时最小的数的值,min_k记录最小值的下标,接着进行交换,( x...

求c语言选择排序法和 冒泡排序法代码!
; }---冒泡算法冒泡排序的算法分析与改进 交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 冒泡排序 1、排序方法 将被排序的记录数组R[1..n]垂直排列,每个记录R看作...

相似回答