2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  數(shù) 據(jù) 結(jié) 構(gòu)</b></p><p>  課 程 設(shè) 計 說 明 書</p><p>  2012 年 1月 8 日</p><p><b>  設(shè)計目的</b></p><p>  本系統(tǒng)是為了實現(xiàn)和比較各種不同排序方法的不同復(fù)雜度,而建立的,從不同的角度比較各

2、算法的優(yōu)劣,從而使使用者能對個排序方法有更清晰的了解.</p><p><b>  設(shè)計內(nèi)容和要求</b></p><p>  本次設(shè)計的內(nèi)容主要有實現(xiàn)各種排序算法以及比較各種算法。要求主要是要執(zhí)行對一種數(shù)據(jù)類型的序列進(jìn)行所有排序方法的排序計算,并返回序列及各算法的排序指標(biāo)。</p><p>  3.本設(shè)計所采用的數(shù)據(jù)結(jié)構(gòu)</p>

3、<p>  本次設(shè)計主要采用的數(shù)據(jù)結(jié)構(gòu)有結(jié)構(gòu)體定義,直接排序,選擇排序,歸并排序,快速排序,冒泡排序,希爾排序,堆排序等。</p><p>  4.功能模塊詳細(xì)設(shè)計</p><p>  4.1 詳細(xì)設(shè)計思想</p><p>  本次設(shè)計分主題設(shè)計和模塊設(shè)計兩部分。</p><p>  主體設(shè)計方面,本系統(tǒng)的主要數(shù)據(jù)類型為含有一個關(guān)

4、鍵字的結(jié)構(gòu)體類型,命名為datatype;設(shè)置兩個全局變量數(shù)組,cn和mn,分別用于記錄每種排序方法中的各排序元素的比較次數(shù)和移動次數(shù)(關(guān)鍵字交換以3次計)的總和。</p><p>  模塊設(shè)計方面,本系統(tǒng)大致可分為排序模塊部分和運行模塊部分。排序模塊部分分為歸并排序模塊,快速排序模塊,冒泡排序模塊,選擇排序模塊,直接排序模塊,希爾排序模塊,堆排序模塊;運行模塊部分分為主函數(shù),自行輸入模塊,隨機模塊,輸出模塊。&

5、lt;/p><p>  以下是各排序算法的核心設(shè)計思想:</p><p>  運行模塊個算法如下:</p><p><b>  4.2 核心代碼</b></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p

6、><p>  #include<conio.h></p><p>  #define MAXNUM 100</p><p>  typedef struct</p><p>  { int key;</p><p>  } datatype;</p><p>  datatype R

7、[MAXNUM];/*定義類型*/</p><p>  int cn[MAXNUM],mn[MAXNUM];</p><p>  void D_InsertSort(datatype R[ ], int n)/*直接排序*/</p><p><b>  {</b></p><p><b>  int i,j;

8、</b></p><p>  extern int cn[MAXNUM],mn[MAXNUM];</p><p>  for(i=2; i<=n; i++)</p><p>  { cn[0]++;</p><p>  if (R[i].key<R[i-1].key)</p><p>  {R[

9、0]=R[i]; mn[0]++;</p><p>  for(j=i-1; R[0].key<R[j].key; j--)</p><p>  R[j+1]=R[j];</p><p>  R[j+1]=R[0]; mn[0]+=2;</p><p><b>  }</b></p><p&

10、gt;<b>  }</b></p><p><b>  }</b></p><p>  void Select_Sort(datatype R[ ],int n)/*簡單選擇排序*/</p><p><b>  {</b></p><p>  int i,j,k;</p

11、><p>  extern int cn[MAXNUM],mn[MAXNUM];</p><p>  for(i=1;i<n;i++)</p><p><b>  { k=i;</b></p><p>  for(j=i+1; j<=n; j++)</p><p><b>

12、  {</b></p><p><b>  cn[1]++;</b></p><p>  if(R[j].key<R[k].key)</p><p><b>  k=j;</b></p><p><b>  }</b></p><p>

13、<b>  if (i==k)</b></p><p>  { R[0]=R[k];</p><p>  R[k]=R[i];</p><p>  R[i]=R[0]; mn[1]+=3; }</p><p><b>  }</b></p><p><b>  }

14、</b></p><p>  void Bubble_Sort (datatype R[ ], int n)/*冒泡排序*/</p><p><b>  {</b></p><p><b>  int i, j;</b></p><p>  extern int cn[MAXNUM],m

15、n[MAXNUM];</p><p><b>  int swap;</b></p><p>  for(i=1; i<n-1; i++)</p><p><b>  {swap=0;</b></p><p>  for(j=1; j<=n-i; j++)</p><

16、p><b>  {</b></p><p><b>  cn[2]++;</b></p><p>  if (R[j].key<R[j+1].key)</p><p>  {R[0]=R[j];</p><p>  R[j]=R[j+1];</p><p>  R

17、[j+1]=R[0]; mn[2]+=3;</p><p><b>  swap=1;</b></p><p><b>  }}</b></p><p>  if(swap==0) break;</p><p><b>  }</b></p><p>&

18、lt;b>  }</b></p><p>  void HeapAdjust(datatype R[ ], int s, int t)</p><p><b>  {</b></p><p>  datatype rc;</p><p>  extern int cn[MAXNUM],mn[MAXNUM

19、];</p><p><b>  int i,j ;</b></p><p><b>  rc=R[s];</b></p><p><b>  i=s;</b></p><p>  for(j=2*i; j<=t; j=2*j)</p><p> 

20、 { cn[3]++;</p><p>  if(j<t && R[j].key<R[j+1].key)j=j+1;</p><p>  if(rc.key > R[j].key) break;</p><p>  R[i]=R[j]; mn[3]++;</p><p><b>  i=j

21、;</b></p><p><b>  }</b></p><p><b>  R[i]=rc;</b></p><p><b>  }</b></p><p>  void HeapSort(datatype R[ ], int n)/*堆排序*/</p&g

22、t;<p><b>  {</b></p><p><b>  int i;</b></p><p>  extern int cn[MAXNUM],mn[MAXNUM];</p><p>  for(i=n/2; i>0; i-- )</p><p>  HeapAdjust(

23、R, i, n);</p><p>  for(i=n; i>1; i--)</p><p>  { R[0]=R[1];</p><p>  R[1]=R[i];</p><p>  R[i]=R[0]; mn[3]+=3;</p><p>  HeapAdjust(R,1, i-1);</p>

24、<p><b>  }</b></p><p><b>  }</b></p><p>  void Merge(datatype R[ ], datatype R1[ ], int s, int m , int t)</p><p><b>  {</b></p>&l

25、t;p>  int i,j,k;</p><p>  extern int cn[MAXNUM],mn[MAXNUM];</p><p>  i=s; j=m+1; k=s;</p><p>  while (i<=m&&j<=t)</p><p><b>  {</b><

26、/p><p><b>  cn[4]++;</b></p><p>  if(R[i].key<R[j].key)</p><p>  { R1[k++]=R[i++]; mn[4]++;}</p><p><b>  else</b></p><p>  { R1[k+

27、+]=R[j++]; mn[4]++;}</p><p><b>  }</b></p><p>  while (i<=m) { R1[k++]=R[i++]; mn[4]++; }</p><p>  while (j<=t) { R1[k++]=R[j++]; mn[4]++;}</p><p>&

28、lt;b>  }</b></p><p>  void MSort(datatype R[ ], datatype R1[ ], int s, int t)</p><p><b>  {</b></p><p><b>  int m;</b></p><p>  extern

29、int cn[MAXNUM],mn[MAXNUM];</p><p>  if(s==t) { R1[s]=R[s]; mn[4]++;}</p><p>  else {m=(s+t)/2;</p><p>  MSort(R, R1, s, m);</p><p>  MSort(R, R1, m+1, t);</p>

30、<p>  Merge(R1, R, s, m, t);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void MergeSort(datatype R[ ], datatype R1[ ], int n)/*歸并排序*/</p><p&

31、gt;<b>  {</b></p><p>  MSort(R, R1,1, n);</p><p><b>  }</b></p><p>  int Partition(datatype R[ ], int low, int high)</p><p><b>  {</b&g

32、t;</p><p>  extern int cn[MAXNUM],mn[MAXNUM];</p><p>  R[0]=R[low]; mn[5]++;</p><p>  while(low<high)</p><p>  { while(low<high&&R[high].key>=R[0].key)

33、 {cn[5]++; high--;}</p><p>  if(low<high) { R[low]=R[high]; low++; mn[5]++; }</p><p>  while(low<high&&R[low].key<R[0].key) { mn[5]++; low++; }</p><p>  if(low&

34、lt;high) {R[high]=R[low]; high--; mn[5]++; }</p><p><b>  }</b></p><p>  R[low]=R[0]; mn[5]++;</p><p>  return low;</p><p><b>  }</b></p>

35、;<p>  void Quick_Sort(datatype R[ ], int s, int t)/*快速排序*/</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  if( s<t )</b></p&g

36、t;<p><b>  {</b></p><p>  i = Partition(R, s, t);</p><p>  Quick_Sort(R, s, i-1);</p><p>  Quick_Sort(R, i+1, t);</p><p><b>  }</b></p

37、><p><b>  }</b></p><p>  void prin(datatype R[],int n)</p><p><b>  {</b></p><p><b>  int i ;</b></p><p>  printf("排序的

38、結(jié)果為:");</p><p>  for(i=1;i<=n;i++)</p><p>  printf("%d ",R[i]);</p><p>  printf("\n ");</p><p><b>  }</b></p><p> 

39、 void sort(datatype R[],int n)/*希爾排序*/</p><p><b>  {</b></p><p>  int gap,i,j,temp;</p><p>  extern int cn[MAXNUM],mn[MAXNUM];</p><p>  for(gap=n/2;gap>0

40、;gap /= 2) /* 設(shè)置排序的步長,步長gap每次減半,直到減到1 */</p><p><b>  {</b></p><p>  for(i=gap;i<n;i++) /* 定位到每一個元素 */</p><p><b>  {</b></p><p>  for(j=i-gap

41、;(j >= 0) && (R[j].key > R[j+gap].key);j -= gap ) /* 比較相距gap遠(yuǎn)的兩個元素的大小,根據(jù)排序方向決定如何調(diào)換 */</p><p><b>  {</b></p><p>  temp=R[j].key;</p><p>  R[j].key=R[j+gap].

42、key;</p><p>  R[j+gap].key=temp;</p><p><b>  cn[6]+=1;</b></p><p><b>  mn[6]+=3;</b></p><p><b>  }</b></p><p><b>

43、  }</b></p><p><b>  }</b></p><p>  } </p><p>  void sui_ji()</p><p><b>  {</b></p><p><b>

44、  int i,n;</b></p><p>  datatype R[MAXNUM]={0},R1[MAXNUM]={0};;</p><p>  a:printf("請輸入你要輸入的個數(shù):");</p><p>  scanf("%d",&n);</p><p><b>

45、;  if(n>100)</b></p><p><b>  {</b></p><p>  printf("超出范圍重新輸入!!!\n");</p><p><b>  goto a;</b></p><p><b>  }</b><

46、;/p><p>  printf("排序前元素順序為:");</p><p>  for(i=1;i<n+1;i++)</p><p><b>  {</b></p><p>  R[i].key=rand();</p><p>  printf("%d &quo

47、t;,R[i].key);</p><p><b>  }</b></p><p>  printf("\n");</p><p>  D_InsertSort(R,n);/*直接排序*/</p><p>  prin(R,n);</p><p>  Select_Sort(R

48、,n);/*簡單選擇排序*/</p><p>  Bubble_Sort(R, n);/*冒泡排序*/</p><p>  HeapSort(R, n);/*堆排序*/</p><p>  MergeSort(R, R1, n);/*二路歸并排序*/</p><p>  Quick_Sort(R,0, n);/*快速排序*/</p>

49、;<p>  sort(R,n);/*希爾排序*/</p><p><b>  }</b></p><p>  void zi_xing_input()</p><p>  { int n,i;</p><p>  datatype R1[MAXNUM]={0};</p><p>

50、;  printf("請輸入你要輸入的個數(shù)(不大于100的整數(shù)):");</p><p>  scanf("%d",&n);</p><p>  printf("請輸入各個元素:");</p><p>  for(i=1;i<n+1;i++)</p><p>  sca

51、nf("%d",&R1[i].key);</p><p>  printf("排序前元素順序為:");</p><p>  for(i=1;i<n+1;i++) printf("%d ",R1[i].key);</p><p>  printf("\n");</p

52、><p>  D_InsertSort(R1,n);/*直接排序*/</p><p>  prin(R1,n);</p><p>  Select_Sort(R1,n);/*簡單選擇排序*/</p><p>  Bubble_Sort(R1, n);/*冒泡排序*/</p><p>  HeapSort(R1, n);/*

53、堆排序*/</p><p>  Quick_Sort(R1,0, n);/*快速排序*/</p><p>  sort(R,n);/*希爾排序*/</p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b><

54、/p><p>  extern int cn[MAXNUM],mn[MAXNUM];</p><p><b>  char s;</b></p><p>  printf(“ 排序算法實現(xiàn)與演示統(tǒng) \n ”);</p><p>  printf(" ┏*

55、*****************************┓\n");</p><p>  printf(" ┃------- 歡 迎 使 用 ----┃\n");</p><p>  printf(" ┃-----(1)隨 機 取 數(shù)-------┃\n");</p>&l

56、t;p>  printf(" ┃-----(2)自 行 輸 入-------┃\n");</p><p>  printf(" ┃-----(0)退 出 使 用-------┃\n");</p><p>  printf(" ┗***********************

57、*******┛\n");</p><p>  printf(" 請 選 擇 操 作 方 式: ");</p><p>  b:s=getch();</p><p><b>  switch(s)</b></p><p><b> 

58、 {</b></p><p>  case '1': system("cls") ; sui_ji(); break;</p><p>  case '2': system("cls"); zi_xing_input(); break;</p><p>  case '

59、;0': printf(" 謝謝使用!! "); exit(0); break;</p><p>  default:printf("錯誤輸入,重新輸入!");goto b;</p><p><b>  }</b></p><p>  printf("\n &quo

60、t;);</p><p>  printf(" 比 較 結(jié) 果 \n");</p><p>  printf(" \n");</p><p>  printf(" 排序方式 比較次數(shù) 移動次數(shù)

61、\n");</p><p>  printf(" \n");</p><p>  printf(" 直 接 %d %d \n",cn[0],mn[0]/3);</p><p>  printf(" \n");<

62、/p><p>  printf(" 簡單選擇 %d %d \n",cn[1],mn[1]/3);</p><p>  printf(" \n");</p><p>  printf(" 冒 泡 %d

63、 %d \n",cn[2],mn[2]/3);</p><p>  printf(" \n");</p><p>  printf(" 堆 排 序 %d %d \n",cn[3],mn[3]/3);</p><p

64、>  printf(" \n");</p><p>  printf(" 二路歸并 %d %d \n",cn[4],mn[4]/3);</p><p>  printf(" \n");</p><p>  printf(&q

65、uot; 快 速 %d %d \n",cn[5],mn[5]/3);</p><p>  printf(" \n");</p><p>  printf(" 希爾排序 %d %d \n&qu

66、ot;,cn[6],mn[6]/3);</p><p>  getchar(); </p><p>  printf("謝謝使用!^ _ ^\n");</p><p>  system("PAUSE");</p><p><b>  return 0;</b></p&g

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論