Python实现排序,快速排序的python实现代码

  Python实现排序,快速排序的python实现代码

  堆排序是一种类似树的选择性排序。在排序过程中,将待排序的记录数据[1…n]视为一棵完整二叉树的顺序存储结构。利用完全二叉树中父节点与子节点的内在关系,从当前无序序列中选择具有最大(或最小)关键字的记录。

  时间复杂度

  O(n l o g 2 log_2 log2 n)

  空间复杂度

  O(1)

  算法特点:

  1)是不稳定排序。

  2)只能用于序列结构,不能用于链结构。

  3)初始建桩需要多次比对,在记录数量较少时不宜使用。堆排序的最坏情况时间复杂度为O(nlog2n),比快速排序的最坏情况O(n2)更有优势,记录越多效率越高。

  完整代码:

  # includesdio . h # includestdlib . h # includestring . h # define max size 100//序列表的最大容量可自行增加,typedef struct { int key//关键字char * otherinfo//其他数据项} ElemType//记录类型typedef struct { elem type data[maxsize 1];//静态序列表的数据字段,其中Data[0]为空闲或哨兵单元int length//序列表}SqList的长度;//顺序表void InitList(SQL list L)//顺序表的初始化{ L . length=0;//使序列表的长度为0,这是序列表的初始化} void Create list(SQL list L)//创建序列表{ printf( Please enter:);While(1)//建立一个无限循环,循环终止条件是回车键{ L.length//序列表长度加一if (L. Length MaxSize)。//判断是否超过最大容量{printf(序列表已满!\ n’);返回;}scanf(%d ,L.Data[L.length]。关键);//顺序表数据的输入if(getchar()== \ n )//循环终止条件中断;} } void input list(SQL list L)//序列表的输出{ int I;//记录次数if(L.length==0)//判断序列表是否为空,如果是,结束函数{printf(序列表为空!\ n’);返回;}printf(打印为:);for(I=1;i=L .长度;I )//使用数据printf(%d ,L.Data[i]。键)在循环打印顺序表中;} void heap Adjust(SQL list l,int s,int m)//假设Data[s 1…m]已经是堆,将Data[s…m]调整为以Data[s]为根的大根堆{//用筛选法调整heap int j;L . Data[0]=L . Data[s];for(j=2 * s;j=m;J*=2)//过滤掉具有较大键的子节点{if (jml.data [j1].关键l .数据[j]。key)//j是key较大的记录的下标j;If (l.data [0])。key=l.data [j]。key)//data [0]应插入到位置s的分隔符处;L . Data[s]=L . Data[j];s=j;} L . Data[s]=L . Data[0];//Insert } void create heap(SQL listl)//构建初始堆,将无序序列L.Data[1…n]构建到大根堆{ int I;for(I=l . length/2;i0;I-)//反复调用heapadjust heapadjust (l,I,l . length);} } void Heap sort(SQL list L)///堆排序序列表L { int I;create the AP(L);//将无序序列L.Data[1…L.length]构建成一个大的根堆for(I=L . length;i1;I-){ L . Data[0]=L . Data[1];//将堆顶部的记录与当前未排序的子序列中的最后一条记录交换L . Data[1…I]=L . Data[I];L . Data[I]=L . Data[0];HeapAdjust(L,1,I-1);//重新调整L.Data[1…i-1]到一个大的根堆} } int main(){ SQL list L;InitList(L);//初始化订单表create list(L);//创建一个序列表堆(l);//堆排序input list(L);//打印排序后的结果返回0;}

  (完)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: