數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——排序與查找_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——排序與查找_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——排序與查找_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——排序與查找_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——排序與查找_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、北京信息科技大學(xué)課程設(shè)計(jì)報(bào)告課程名稱 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 題 目 排序與查找 指導(dǎo)教師 趙 慶 聰 設(shè)計(jì)起止日期 設(shè)計(jì)地點(diǎn) 系 別 信息管理學(xué)院 專 業(yè) _信息管理與信息系統(tǒng)_姓名/學(xué)號_魯?shù)?012012108_1. 課程實(shí)踐目的:通過本實(shí)踐使學(xué)生對各類排序算法有更深入的了解,在實(shí)際應(yīng)用中學(xué)會使用排序算法解決具體問題。2. 課程實(shí)踐內(nèi)容:a) 隨機(jī)產(chǎn)生20個0100之間的整數(shù),允許有重復(fù)b) 分別利用直接插入排序、直接選擇排序、快速排序、雙向起泡排序?qū)@20個數(shù)進(jìn)行排序(遞增遞減均可),并統(tǒng)計(jì)在各種排序方法中關(guān)鍵字的比較次數(shù),最后輸出各類排序方法的排序結(jié)果及關(guān)鍵字的比較次數(shù)。提示:雙向起泡排序

2、是對標(biāo)準(zhǔn)起泡排序算法的改進(jìn),該方法第一次自上而下進(jìn)行“起泡”,使最大元素“下沉”到底,第二次自下而上進(jìn)行“起泡”,使最小元素“上浮”到頂,之后又重復(fù)上述過程,每趟起泡后都會相應(yīng)縮小下一趟的起泡排序區(qū)間,直至排序完成。起泡期間可以通過對某趟“起泡”的“最后交換位置”進(jìn)行記憶,以盡可能快地縮短下一趟的“起泡”區(qū)間。c) 用折半查找法在前面的已排好序的數(shù)據(jù)表上查找,是否有此數(shù),如有,輸出其序號。如沒有,在屏幕給出提示信息。3. 實(shí)踐步驟:#include<stdio.h>#include<stdlib.h>#include<time.h>#define N 100

3、#define OK 1#define ERROR 0#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef structElemType *elem;int length; int listsize; List;Status InitList(List &L)L.elem=(ElemType * ) malloc(LIST_INIT_SIZE * sizeof(Ele

4、mType); L.length = 0; L.listsize=LIST_INIT_SIZE; return OK;/InitListvoid Create(List &L, int n) int i; srand(time(NULL); for(i=0;i<n;i+) L.elemi=rand()%N; L.length+; printf("%d ",L.elemi); printf("n");int InsertSort(List L)int i,j,t,m;m=0;for(i=1;i<L.length;i+)t=L.elemi

5、;j=i-1;if(t>=L.elemj) m+;else m+;while(j>=0)&&(t<L.elemj)L.elemj+1=L.elemj;j-;L.elemj+1=t;return m;int SelectSort(List L)int i,j,k,min,t=0;for(i=0;i<L.length;i+)min=i;for(j=i+1;j<L.length;j+)if(L.elemj<L.elemmin)min=j;t+;else t+;if(min!=i)k=L.elemi;L.elemi=L.elemmin;L.elemm

6、in=k;return t;int QuickSort(List L,int s,int t) int i=s,j=t,count4=0; if(s<t) L.elem0=L.elems; do while(j>i&&L.elemj>=L.elem0)j-;count4+; if(i<j) L.elemi=L.elemj; i+; while(i<j&&L.elemi<=L.elem0)i+;count4+; if(i<j) L.elemj=L.elemi; j-; while(i<j); L.elemi=L.el

7、em0; QuickSort(L,s,j-1); QuickSort(L,j+1,t); return count4; int BubbleSort(List L)int flag,i,j;int t=0;flag=1;while(flag=1)flag=0;i=0;for(j=L.length-i;j>i;j-)if(L.elemj-1>L.elemj)flag=1;int m;m=L.elemj;L.elemj=L.elemj-1;L.elemj-1=m;t+;else t+;return t; void display(List L)int i;for(i=0;i<L.

8、length;i+) printf("%d ",L.elemi); printf("n");void main() List L;int low,high,a,b,c,d; InitList(L);printf("請將隨機(jī)產(chǎn)生的0-100間的20個數(shù)輸出:n");Create(L,20);printf("n直接插入法排序輸出的順序表為:n"); a=InsertSort(L); display(L); printf("此排序法關(guān)鍵字比較的次數(shù)為:%dn",a); printf("n直接

9、選擇法排序輸出的順序表為:n");b=SelectSort(L);display(L);printf("此排序法關(guān)鍵字比較的次數(shù)為:%dn",b); printf("n快速排序輸出的順序表為:n");c=QuickSort(L,1,20);display(L);printf("此排序法關(guān)鍵字比較的次數(shù)為:%dn",c);printf("n雙向起泡法排序輸出的順序表為:n");d=BubbleSort(L);display(L);printf("此排序法關(guān)鍵字比較的次數(shù)為:%dn",d)

10、;1. #include "stdio.h"   2. #include "stdlib.h"   3. #include "string.h"   4. #include "time.h"   5. #include "limits.h"   6. #define MAXITEM

11、0;1000   7. typedef int KeyType,ElemType;   8. int count1=0,count2=0,count3=0,count4=0,count5=0,count6=0;   9. int swap1=0,swap2=0,swap3=0,swap4=0,swap5=0,swap6=0;   10. typedef struct rec   11.

12、   12.     KeyType key;   13.     ElemType data;   14. sqlistMAXITEM;   15.    16. void gennum(sqlist r,sqlist t,int n)   17.   &#

13、160;18.     int i;   19.     srand(unsigned)time(NULL);   20.     for(i=1;i<=n;i+)   21.        ti.key=rand()%100;   22.   

14、0;     ri.key=ti.key;   23.        24.    25.    26. void ini(sqlist r,sqlist t,int n)   27.    28.     int i; 

15、0; 29.     for(i=1;i<=n;i+)   30.         ri.key=ti.key;   31.    32.    33. void BubbleSort(sqlist r,int n)/起泡法r1rn   34.    3

16、5.     int i,j;   36.     struct rec w;   37.     for(i=1;i<=n-1;i+)   38.        for(j=n;j>=i+1;j-)   39.    

17、;       40.           if(rj.key<rj-1.key)   41.              42.            &

18、#160; w=rj;   43.              rj=rj-1;   44.              rj-1=w;   45.         

19、;     swap1+;   46.              47.           count1+;   48.           49. 

20、0;  50.    51.    52.    53. void InsertSort(sqlist r,int n)/直接插入排序r1rn   54.    55.     int i,j;   56.     for(i=2;i<=n;i+)  &

21、#160;57.        58.         count2+;   59.         r0=ri;   60.         j=i-1;   61.   

22、60;     while(r0.key<rj.key)   62.            63.             rj+1=rj;   64.         &#

23、160;   j-;   65.             count2+;   66.             swap2+;   67.         &#

24、160;  68.         rj+1=r0;   69.         swap2+;   70.        71.    72.    73. void  SelectSort(sqlist&#

25、160;r,int n)/簡單選擇排序r1rn   74.    75.     int i,j,k;   76.     struct rec temp;   77.     for(i=1;i<=n-1;i+)   78.     

26、0;  79.         k=i;   80.         for(j=i+1;j<=n;j+)   81.             if(rj.key<rk.key)k=j;count3+;  &

27、#160;82.         if(i!=k)   83.            84.             temp=ri;   85.        

28、;     ri=rk;   86.             rk=temp;   87.             swap3+;   88.       &#

29、160;    89.        90.    91.    92. void QuickSort(sqlist r,int s,int t)/快速排序rsrt,r0空出   93.    94.     int i=s,j=t;   95. &

30、#160;   if(s<t)   96.        97.         r0=rs;swap4+;   98.         do   99.        &#

31、160;   100.             while(j>i&&rj.key>=r0.key)j-;count4+;   101.             if(i<j)   102.    

32、0;           103.                 ri=rj;   104.                 i+;

33、60;  105.                 swap4+;   106.                107.           

34、;  while(i<j&&ri.key<=r0.key)i+;count4+;   108.             if(i<j)   109.                110.   &

35、#160;             rj=ri;   111.                 j-;   112.            

36、     swap4+;   113.                114.         while(i<j);   115.         ri=r0; 

37、  116.         swap4+;   117.         QuickSort(r,s,j-1);   118.         QuickSort(r,j+1,t);   119.     &

38、#160;  120.    121.    122. void ShellSort(sqlist r,int n)/希爾排序r1rn   123.    124.     int i,j,gap;   125.     struct rec x;   126

39、.     gap=n/2;   127.     while(gap>0)   128.        129.         for(i=gap+1;i<=n;i+)   130.       

40、0;    131.    132.             j=i-gap;   133.             while(j>0)   134.       

41、;        if(rj.key>rj+gap.key)   135.                  136.                 x

42、=rj;   137.                 rj=rj+gap;   138.                 rj+gap=x;   139.   

43、0;             j=j-gap;   140.                 count5+;   141.           &#

44、160;     swap5+;   142.                  143.               else   144.    

45、              145.                 j=0;count5+;   146.              &#

46、160;   147.            148.         gap=gap/2;   149.        150.    151.    152. void sift(sqlist r

47、,int l,int m)   153.    154.     int i,j;   155.     struct rec x;   156.     i=l;   157.     j=2*i;   15

48、8.     x=ri;   159.     while(j<=m)   160.        161.         if(j<m&&rj.key<rj+1.key)j+;count6+;   162.    

49、;     if(x.key<rj.key)   163.            164.             ri=rj;   165.          &

50、#160;  i=j;   166.             j=2*i;   167.             count6+;   168.         

51、0;   swap6+;   169.            170.         else j=m+1;count6+;   171.        172.     ri=x; &#

52、160; 173.    174. void HeapSort(sqlist r,int n)/堆排序r1rn   175.    176.     int i;   177.     struct rec m;   178.     for(i=n/2;i&

53、gt;=1;i-)sift(r,i,n);   179.        for(i=n;i>=2;i-)   180.           181.           m=ri;   182.    &

54、#160;      ri=r1;   183.           r1=m;   184.           swap6+;   185.         

55、0; sift(r,1,i-1);   186.           187.    188.    189. void main()   190.    191.        192.     int k,

56、n,a;   193.     sqlist r,t;   194.     printf("                 *n");   195.     printf("&

57、#160;                *                                 

58、    *n");   196.     printf("                 *      * 內(nèi)部排序算法的性能分析 *     *n");&#

59、160;  197.     printf("                 *                       &

60、#160;             *n");   198.     printf("                 *nn");   199.   

61、; 200.     printf("-*-*-n");   201.     printf("*是否執(zhí)行程序*n");   202.     printf("(是) 按 1 鍵,   (否) 按 0 鍵n");   203. &

62、#160;   printf(" 按鍵為:");   204.     scanf("%d",&a);   205.     printf("-*-*-n");   206.    207.     while(a=1)  

63、0;208.     printf("*請輸入要排序的數(shù)據(jù)的個數(shù):");   209.      scanf("%d",&n);   210.        211.      gennum(r,t,n);   212.   

64、60;  printf("n");   213.    214.      printf("*隨機(jī)產(chǎn)生的最初順序是:n");   215.      for(k=1;k<=n;k+)   216.        printf("%3d

65、",tk.key);   217.         if(k%20=0)   218.             printf("n");   219.        220.    

66、;  printf("n");   221.      BubbleSort(r,n);   222.      printf("n*排序之后的順序是:n");   223.      for(k=1;k<=n;k+)   224.   

67、60;    printf("%3d",rk.key);   225.         if(k%20=0)   226.             printf("n");   227.    

68、60;   228.      printf("nn");   229.      printf("-*分析結(jié)果*-nn");   230.      printf("            

69、;                  *起泡排序*n");   231.      printf("                  &#

70、160;  比較的次數(shù)是: %d,移動的次數(shù)是: %dnn",count1,swap1);   232.        233.      ini(r,t,n);   234.      InsertSort(r,n);   235.     

71、60;printf("                              *直接插入*n");   236.      printf("    

72、;                 比較的次數(shù)是: %d,移動的次數(shù)是: %dnn",count2,swap2);   237.        238.      ini(r,t,n);   239.  

73、60;   SelectSort(r, n);   240.      printf("                            *簡單選擇排序*n"); 

74、  241.      printf("                     比較的次數(shù)是: %d,移動的次數(shù)是: %dnn",count3,swap3);   242.        243.      ini(r,t,n);   244.      QuickSort(r,1,n);   245.      printf("           

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論