2023年数据结构内排序实验报告.docx
一、实验目的1、 了解内排序都是在内存中进行的。2、为了提高数据的查找速度,需要对数据进行排序。3、掌握内排序的方法。二、实验内容1、设计一个程序exp 101. cpp实现直接插入排序算法,并输出9,8,7,6, 5,4, 3,2,1,0 的排序过程。(1)源程序如下所示:文献名:exp 1 0-1. cpp# inc 1 ude <stdio. h > t y p e d e f int KeyTy p e;#define MAXE 20。线性表中最多元素个数t ypedef c har In f oTypel 0 ;t y ped e f s t ruct记录类型(dKe y Ty p e key;关键字项“nf o T y p e d ata; ”/其他数据项,类型为Inf oTy p e Re c Type;void Insert S o r t(R e cType R口,i n t n ) / /对 R 0 n - 1 按递增有序进行直接插入排序(“nt i , j,k;e cType temp;s f or ( i =l;i<n;i+)叼=il;从右向左在有序区RO.il中找Ri的插入位置,whil e (j>=0 && t e mp. k e y<Rj .key)gR E j +l=Rj;。/将关键字大于R i. key的记录后移8。j -; Ri+l=t e m p y 在 j +1 处插入 R i ,pr i ntf(n i =%d,”,i)产/ /输出每一趟的排序结果p r in t f(”插入(1,结果为temp);o f o r ( k =0; k <n;k+)oaprin t f(n%3d H ,R k . k e y);叩rin t f(nnn); vo i d m a in()int i , k 9n=l 0 ;KeyType a=9, 8 ,7, 6,5,4,3 ,2,1,0;dRecTyp e R MAXE;fo r (i= 0 ; i <n; i +)gR i .k e y=ai;print f初始关键字:-);/输出初始关键字序列ofor (k=0; k<n; k+),pr i nt f ( " % 3 d " ,R k. k e y);dInsertSor t ( R,n);P rintf L最后结果:");/输出初始关键字序列for (k=0;k<n; k+)叩 rin t f(” 3d", R k .ke y );printf(nnu);)(2)运营的结果如下图所示:7,6,543,21,0 00 00 00 0911111119802222298713333387692444498743214432103continueru Ll-rrr I rn Llrn Llrrr Ll-rrr e rn H m Llrn Ll EK Eh Eh ER EK Eh EK EK EK 0 y 七 口在口在口吐口吐 口在口在口吐口吐口 © 弓 876543210 : y 键入入人入入入入入入果an ->_ rrn - rrn 一 m 一 m - rrn 一 rrn - m - rrTJ _3_11 口 An * 二-n s nx-123456789Fe 反r i i i .1 -1 i i i 三耳 p个程序explO2 . c p p实现希尔插入排序算法,并输出9, 8,设计2、0的排序过程。(1)源程序如下所示:文献名:e xplO 2.cpp#inclu d e <stdi o .h># d efi n e MAXE 20/线性表中最多元素个数typedef int Key T y pe;typ e d e f chartyp e d e f charInfoT y pe10;t ypede f str u ct/记录类型K e yType key;。关键字项3111fo Typedata; 。/其他数据项,类型为I n foType R e cType;void Shell S ort(R e cType R ,i n t n)/希尔排序算法nnt i, j , d, k;R e c T y p e temp;d = n/2;oo ”/d 取初值 n/2dw hile (d>0)(0aafor (i=d;i< n ; i +)。/ /将R d . .n-1分别插入各组当前有序区中g j= i d ;whi 1 e (j>=0 && R j .key>Rj+d.key)g g。tem p =R j;Rj与 Rj+d互换,Rj =Rj +d;3Rj+d= t emp;o ° j=j-d;g 。printf(nd=%d: ",d);。输出每一趟的排序结果df or(k=0;k<n;k+)3 dp r intf(,%3d,Rk. key);gp r i ntf(nnn);d=d/2;/ /递减增量d)v o id main()dint i,k, n =10;KeyTy p e a = 9,8,7, 6,5,4,3 ,2,1,0;R e cType RMAXE;for (i=0;i<n;i+ + )R i .ke y =ai;P r i ntf("初始关键字:”);。/输出初始关键字序列f or (k=0;k< n ; k + + )printf(H%3d n, R kJ. key);sprint f (n nn);Shell S ort(R,n );prin t f(n后结果:输出初始关键字序列for (k=0; k < n ; k+),p rin t f(n%3d,Rk .key);pri n tf (nn n n );(2)结果如下图所示:初始天键字:9876543210d =5:4321098765d=2:0123456789d=l: 0123456789重后结果:0123456789Press any key to continue.3、设计一个程序e xplO3. cpp实现冒泡排序算法,并输出 9,8, 7,6,5 A3, 2/,0)的排序过程。(1)源程序如下所示:文献名:e x pl 0 -3. c p p# i n clud e < s t d io. h > # def i n e MAXE 20 / /线性表中最多元素个数typedef int Ke y Typ e ;t ypedef char In f oType 10;ty p e d e f str u c t/记录类型dK e yType key;/关键字项I n f oT y p e d at a ;/其他数据项,类型为Inf OType Rec Type;v o id B u b b 1 eSo rt(RecT y pe R口,i nt n)。/ / 冒泡排序算法, int i,j,k;sRecT y pe temp; e f o r (i=0;i<n-l;i+ )ofor (j=n-l;j>i;卜)。比较,找出本趟最小关键字的记录。两f (Rj.key<R Ej-l.key)g ( 0,temp= R j ; /Rj 与进行互换,将最小关键字记录前移Rj =R j -1;Rj -l=temp;° prin t f (n i =% d,冒出的1prin t f (n i =% d,冒出的1外关键字:%d,结果为:H,i,Ri.ke y);输出每一趟的排序结果for (k = 0; k<n;k+) g print f (n% 2 d ”,Rk. key); gprintf ( " nH);void m a m() dint i, k,n=10;Keylyp e a = 9,8,7,6, 5, 4,3,2, 1,0;RecTypeR MAXE;f o r ( i = 0 ;i<n;i+)R i.k e y=a i ;3 p rint f初始关键字:”);斶出初始关键字序列 afor ( k =0;k< n ;k+)pr i ntf(''%2d'',R k.key);叩 r i n t f(nnn);Bubb 1 e Sort(R,n);p r intf ("最后结果:“);”/输出初始关键字序列for (k=0;k< n k+ )p r in t f(H%2dfRk .key);叩 rintf(''n'');)(2)结果如下图所示:127897734678 9444448922222229111111111 0:0:0:0:0:0:0:0:0:0my nr-l-nF my my mF my rnY mF 7 3 身Eh Eh Eh Eh Eh Eh Eh 身 土口土口土口土口土口土口土口土口土口 65 5012345678 6$=x:x:x=£=x:x:聚一 7 rfH.- rfH.- 隹卷卷镂隹卷卷卷隹2关关关关关关关关关:日雪<¥譬譬¥¥薯取 子: 键出出出出出出出出出果 关冒冒冒冒冒冒冒冒4口 ,/ , , , / ,二-rf 力 0123456781 =-3氐 、不 i i i i i i i i i 三耳