记序排序(最快排序).doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
记序排序 记序排序是建立在归并操作上的一种有效的 排序算法,利用 数组元素序号快速定位最大的元素,把最大的元素往后调藉以达到排序作用的排序算法。 记序排序基本思想 记序排序的算法是: 初始化操作,a[i]指向第一个元素,a[j]指向最后一个元素; 数组下标变量先从数组a[0..n-1]首端和尾端向中间移动,比较选出关键字较大的n/2个元素放在前半数组; 调整指针到前半数组; 数组下标变量先从数组a[0..n/2]首端和尾端向中间移动,比较选出关键字较大的n/4个元素放在前四分之一数组; 调整指针到前四分之一数组; 经过└log2n┘次循环比较将数值最大的元素放入a[1]; 将最大元素a[1]与队尾元素a[n-1]交换; 初始化操作,a[i]指向第一个元素,a[j]指向未排序的最后一个元素; 以上2-8步骤执行n遍; 记序排序性质 最坏时间复杂度o(nlogn) 最好时间复杂度o(nlogn) 空间复杂度o(1) 稳定排序 记序排序 c语言代码 #includestdio.h? #includestdlib.h void?main()? {? int?i,j,p,t,k,temp,n=100; int?a[100]; printf(排序前:\n); for(i=0;in;i++) { ?a[i]=rand(); ?printf(a[%d]=%d\t,i,a[i]); ?if((i+1)%5==0) ?????printf(\n); } t=n;? while(t)????????????????????? {? ????i=p=t; ????k=1;??????? ????while(i)? ????{? ??????i=i/2;? ??????k=2*k;? ????}? ????k=k/2;????????????????? ???? ????while(k)??????????????? ????{? ?????? ?????for(i=0,j=p-1;ij;i++,j--)? ????????if(a[i]a[j])? ????????{?? ?????????temp=a[i]; ?????????a[i]=a[j]; ?????????a[j]=temp; ????????}?; ????? ?????k=k/2;? ?????p=(p+1)/2;? ????}? temp=a[t-1]; a[t-1]=a[0]; a[0]=temp;? t--;? }? printf(排序后:\n); for(i=0;in;i++) { ?printf(a[%d]=%d\t,i,a[i]); ?if((i+1)%5==0) ?????printf(\n); } } 带头结点单链表记序排序 #include stdio.h #include stdlib.h typedef int ElemType; #define N 10 //////////////////////////////////////////// //定义结点类型 typedef struct Node { ElemType data; //单链表中的数据域 struct Node *next; //单链表的指针域 }Node,*LinkedList; LinkedList Creat(int n) { LinkedList head,r,p; int x,i; head=(Node*)malloc(sizeof(Node)); r=head; printf(输入数字:\n); for(i=n;i0;i--) { scanf(%d,x); p=(Node*)malloc(sizeof(Node)); p-data=x; r-next=p; r=p; } r-next=NULL; return head; } int sizeList(LinkedList L) { Node *p=L; int size = 0; while(p-next) { size++; //遍历链表size大小比链表的实际长度小1 p= p-next; } return size; //链表的实际长度 } LinkedList LinkedListSortT(LinkedList L) { Node *p,*q; int i,j,k,t,m,n,l,s; t=n

文档评论(0)

王健 + 关注
实名认证
内容提供者

分析+想象+技巧=成功

1亿VIP精品文档

相关文档