1、ubuntu04linuxcgcc(Ubuntu2-19ubuntu1)2。
2、#include#include#defineNUM_SIZE20typedefstructdata_node{ intdata; structdata_node*next;}s_link_list;s_link_list*create_node(intvalue){ s_link_list*node=(s_link_list*)malloc(sizeof(s_link_list)); node->data=value; node->next=NULL; returnnode; }voidadd_node(s_link_list*head,s_link_list*node){ s_link_list*tmp=head; while(tmp->next!=NULL) { tmp=tmp->next; } tmp->next=node;}voidprint_list(s_link_list*head){ s_link_list*tmp=head; printf("thesinglelinklist:[head]->"); while(tmp->next!=NULL) { printf("%d->",tmp->next->data); tmp=tmp->next; } printf("[NULL] ");}voidfree_list(s_link_list*head){ s_link_list*tmp=head,*r=NULL; while(tmp!=NULL) { r=tmp->next; free(tmp); tmp=r; }}voidsort_list(s_link_list*head){ s_link_list*p=head->next,*q=NULL,*r=NULL; //p指向第一个数据节点 if(p!=NULL) //单链表有一个或者以上的数据节点 { r=p->next; //r保存*p节点的直接后继节点的指针 p->next=NULL; //构造只含有一个数据节点的有序表 p=r; while(p!=NULL) { r=p->next; //r保存*p节点的直接后继节点的指针 q=head; while(q->next!=NULL&&q->next->datadata) q=q->next; //在有序表中查找插入*p的直接前驱节点*q的位置 p->next=q->next; //将*p插入到*q之后 q->next=p; p=r; //扫描原单链表余下的节点 } }}intmain(){ inti=0,j=0; s_link_list*head=NULL,*tmp=NULL; head=create_node(0); for(i=0;i。
3、xxx@linux:~/code#gcc-osingle_linklistsingle_linklist.c xxx@linux:~/code#./single_linklist thesinglelinklist:[head]->83->86->77->15->93->35->86->92->49->21->62->27->90->59->63->26->40->26->72->36->[NULL]afterinsertionsort:thesinglelinklist:[head]->15->21->26->26->27->35->36->40->49->59->62->63->72->77->83->86->86->90->92->93->[NULL]。
二、排序算法的C语言编程实现1、气泡排序(又称冒泡算法)基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。。
2、选择排序,基本原理是每一次从待排序的数据元素中选出小(或大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。。
3、快速排序,基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。。
4、插入排序,基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。。
5、希尔排序,该方法实质上是一种分组插入方法。
6、堆排序,它是选择排序的一种。。
7、归并排序,基本思想:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。。
三、插入排序算法C语言实现1、在插入前。
2、将待插入元素插入,得到一个新的排好序列。
3、这里是源代码(要注意p>=0的边界条件)。
四、C语言演示直接插入排序1、首先打开VC++ 。
2、文件》》新建 。
3、新建一个C++文档 。
4、主要代码,已经注释了关键部分voidInsertSort(int*R,intn){/*对数组R中的元素R[1]..R[n-1]按递增序进行插入排序*/ inti,j; /*空出哨位R[0]*/ for(i=n;i>=i--)R[i]=R[i-1]; /*依次插入R[2],…,R[n]*/ for(i=i=R[j]) break; } /*R[i]插入到正确的位置上*/ R[j+1]=R[0]; } /*元素复位*/ for(i=0;i。
五、C++程序实现数组排序1、下面以冒泡排序为例详细介绍。
2、冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,每次比较相邻的两个元素,如果顺序不对则交换它们,直到遍历完整个数列。
3、具体操作过程如下:遍历数组,比较相邻两个元素的大小。
4、如果前一个元素大于后一个元素,则将它们交换位置。
5、重复步骤1和步骤直到遍历完整个数组。
6、对未排序的元素重复上述操作,直到整个数组排序完成。
7、下面是使用冒泡排序算法对数组排序的示例代码:```C#include#defineN10//数组大小intmain(){inti,j,tempinta[N]={5,2,7,1,8,9,3,6,4,0}//待排序数组//冒泡排序for(i=0ia[j+1]){temp=a[j]a[j]=a[j+1]a[j+1]=temp}}}//打印排序后的数组for(i=0i 8、接着使用双重循环实现冒泡排序算法,后打印排序后的数组。 9、还可以根据需要使用其他排序算法,实现对数组的排序。 1、貌似没有输出函数吧?。 1、一、插入排序,顾名思义,每次插入都遍历一次有序数列,找到新插入元素的位置,将其放入数列中即可。。 2、二、在插入排序中,我们假定给的无序数列为inta[6]={5,2,4,6,1,3}.。 3、三、算法的基本执行步骤1:第一个元素我们认为是有序的,因此选取第二个元素开始进行插入排序。。 4、三、算法的基本执行步骤2:在已排序的(已有序)的元素中,从后向前扫描数列。。 5、三、算法的基本执行步骤3:若该元素(已排序的元素)大于1中取出的元素且已排序元素还未扫描完,则将该元素向后移一位。。 6、三、算法的基本执行步骤4:直到找到取出元素的位置。。 7、三、算法的基本执行步骤5:重复2至4的步骤,直到数列中的数字被全部遍历。。 8、四、具体实现代码如下:。 9、五、运行效果如下:总共执行了5次插入排序。。 10、六、效率分析,在坏的情况下(数列逆序),比较次数和移动次数多为n*n(-1)/2。 1、插入排序,顾名思义,每次插入都遍历一次有序数列,找到新插入元素的位置,将其放入数列中即可。 1、插入排序,顾名思义,每次插入都遍历一次有序数列,找到新插入元素的位置,将其放入数列中即可。