C语言的四种排序代码
来源:互联网 发布:js 模拟dos 编辑:程序博客网 时间:2024/05/17 23:05
快速排序:
#include"stdio.h"void quick_sort(int s[], int l, int r){ int k,a,b,m=s[l]; a=l,b=r; while(l<r) { if(s[r]<=m) { s[l]=s[r]; s[r]=s[++l]; s[l]=m; } else r--; quick_sort(s,a,l-1); quick_sort(s,l+1,b); }}int main(){ int array[]={53,36,48,41,60,7,13,5,56}; int l=0,r=sizeof(array)/sizeof(int)-1; quick_sort(array, l, r); for(l=0;l<=r;l++) printf("%d ",array[l]); printf("\n"); return 0;}
选择排序:
#include"stdio.h"int main(){ int array[6]={24,70,12,85,106,8}; int i,j,n=0,middle,sub,min; for(j=0;j<6;j++) { min=array[n]; for(i=n;i<6;i++) { if(min>array[i]) { min=array[i]; sub=i; } } middle=array[n]; array[n]=array[sub]; array[sub]=middle; n++; } for(j=0;j<6;j++) printf("%d ",array[j]); printf("\n"); return 0;}
希尔排序:
#include"stdio.h"int main(){ int array[]={113,76,55,23,60,17,18,85,66,11}; int h,j,i,m,len=sizeof(array)/sizeof(int); for(h=len/2;h>0;h=h/2) { for(j=h;j<len;j++) { for(i=j-h;i>=0;i=i-h) { m=array[i]; if(array[i+h]<m) { array[i]=array[i+h]; array[i+h]=m; } } } } for(j=0;j<len;j++) printf("%d ",array[j]); printf("\n"); getchar(); return 0;}
插入排序(复杂型):
#define null 0#include"stdio.h"#include"malloc.h"struct student {int num;struct student *next;};int n=0;struct student *create(void){struct student *head,*p1,*p2;p1=p2=(struct student*)malloc(sizeof(struct student));head=null;scanf("%d",&p1->num);while(p1->num!=null){n=n+1;if(n==1)head=p1;p1=(struct student*)malloc(sizeof(struct student));p2->next=p1;p2=p1;scanf("%d",&p1->num);}p1->next=null;return(head);}/*------------------ 动态链表的建立-------------------*/struct student *paixu(struct student *head){struct student *listp,*limbo,*listx; /*---------------------------------------------------------------------------------------------------------- 1.listP为无序区链表的遍历指针,作提取节点和有序区比较的作。 2.limbo为过渡指针,每当无序区遍历到的节点值小于有序区节点遍历到的值,则节点插到有序区链表的最后面,并且把 此节点的next地址设定为null,next为null为有序区链表遍历结束的条件,为了不使无序区的节点失去联系,需要把此 节点next的值赋值给limbo,再把null赋值给next,把limbo的值赋值给listp,使listP指向无序区下一个需要插入节点。 3.listx为有序区链表的便利指针,listx->next=null为遍历结束的标示。------------------------------------------------------------------------------------------------------------*/listp=limbo=listx=head;if(listp->num!=null){listp=listp->next;head->next=null;}else printf("链表为空,无法排序");/*----------------------------------------------------------------------------------------- 把第一个节点放入有序区,listp指向下一个需要比较的节点,然后把刚放入有序的阶段的next设为null。-------------------------------------------------------------------------------------------*/if(listp->num!=null){if(listp->num>head->num){limbo=listp->next;listp->next=head;head=listp;listp=limbo;}else{head->next=listp;limbo=listp->next;listp->next=null;listp=limbo;}}/*------------------------------------------------------------------------------------------------ 第二个节点放入有序区,如果大于有序区的首节点,就让有序区的头指针指向它,指针listP指向下一个需要 比较的节点;否则就把节点的next设置为null,在让指针p指向下一个需要比较的节点(利用过渡节点limbo)。-------------------------------------------------------------------------------------------------*/while(listp->num!=null){listx=head;while(listx->next!=null){if(listp->num>listx->num){limbo=listp->next;listp->next=head;head=listp;listp=limbo;break;} if(listp->num>=listx->next->num&&listp->num<=listx->num){limbo=listp->next;listp->next=listx->next;listx->next=listp;listp=limbo;break;}else{listx=listx->next;}}if(listx->next==null&&listp->num<listx->num){listx->next=listp;limbo=listp->next;listp->next=null;listp=limbo;}}/*-------------------------------------------------------------------------------------------------------------------------------- 把其余节点依次放入有序区, 如果大于有序区的首节点,就让有序区的头指针指向它,指针listP指向下一个需要比较的节点; 如果小于有序区的当前尾节点,插入在有序区链表尾部,把节点的next设置为null,让指针listp指向下一个需要比较的节点(用过渡节点limbo); 如果小于等于当前listx指向的节点并且大于等于listx->next指向的节点,就插入他们中间。---------------------------------------------------------------------------------------------------------------------------------*/return(head);/*------------------------- 把head的值返回给函数。--------------------------*/}int print(struct student *head){struct student *y;y=head;while(y){printf("%d ",y->num);y=y->next;}return 0;}/*-------------- 链表输出---------------*/int main(void){struct student *head,*a;head=create();a=paixu(head);print(a);return 0;}
- C语言的四种排序代码
- c语言种必须掌握的四种排序方法
- C语言四种常用排序
- 排序C语言代码
- 快速排序的C语言代码实现
- 快速排序的C语言代码实现
- 快速排序的C语言代码实现
- 快速排序的C语言代码实现
- 冒泡排序的C语言代码
- 希尔排序的c语言实现代码
- 快速排序的c语言实现代码
- C语言几种经典排序代码
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- 排序算法:几种常见的排序算法的C语言代码
- 希尔排序C语言代码
- 快速排序C语言代码
- 归并排序C语言代码
- 插入排序C语言代码
- Village's 'goat pot' ultimate adventure in eating
- poj1325
- pip安装
- 输出四个数字字符
- 打印图案(A-G)使图案成金字塔状 从上往下字母图案变,逐渐增加
- C语言的四种排序代码
- 计算器 --- 简单工厂模式
- 字符统计
- maven项目建立pom.xml报无法解析org.apache.maven.plugins:maven-resources-plugin:2.4.3
- 折半查找的递归和非递归实现(C++)
- android中2D绘图小技巧
- linux的常用命令集锦
- [ACM - 数论]最简单的计算机
- 数据挖掘,机器学习等方面书籍推荐