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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p><b>  題目</b></p><p><b>  排序</b></p><p><b>  需求分析</b><

2、/p><p><b>  2.1、選題要求</b></p><p> ?。?)設(shè)計(jì)一個(gè)菜單,格式如下:</p><p><b>  1.直接插入排序</b></p><p><b>  2.希爾排序</b></p><p><b>  3.冒泡排序

3、</b></p><p><b>  4快速排序</b></p><p><b>  5選擇排序</b></p><p><b>  6.堆排序</b></p><p><b>  7.退出程序</b></p><p>

4、 ?。?)選擇不同的菜單進(jìn)行相應(yīng)的排序,并給出排序的關(guān)鍵字序列。</p><p>  2.2、選題的意義及背景</p><p>  排序是計(jì)算機(jī)程序設(shè)計(jì)中的一種重要操作。它的功能是將一個(gè)數(shù)據(jù)元素的任意序列,重新排列成一個(gè)按關(guān)鍵字有序的序列。</p><p>  排序的方法很多,但是就其全面性能而言,很難提出一種被認(rèn)為是最好的方法,每一種方法都有各自的優(yōu)缺點(diǎn),適合在不

5、同的環(huán)境下使用。如果按排序過程中依據(jù)的不同原則對(duì)內(nèi)部排序方法進(jìn)行分類,則大致可分為插入排序,交換排序,選擇排序,歸并排序和記數(shù)排序等五類。</p><p>  此實(shí)驗(yàn)通過對(duì)直插排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序這幾種內(nèi)部排序算法進(jìn)行比較,能使我們更好的掌握這些排序的基本思想及排序算法。通過該題目的設(shè)計(jì)過程,可以加深理解各種數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及相應(yīng)上運(yùn)算的實(shí)現(xiàn),進(jìn)一步理解和熟練掌握課本中

6、所學(xué)的各種數(shù)據(jù)結(jié)構(gòu),學(xué)會(huì)如何把學(xué)到的知識(shí)用于解決實(shí)際問題,培養(yǎng)我們的動(dòng)手能力。</p><p>  2.3、課程設(shè)計(jì)目標(biāo)</p><p>  本課程設(shè)計(jì)對(duì)以下內(nèi)部排序算法進(jìn)行比較:直插排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序。</p><p>  待排序表的元素關(guān)鍵字為整數(shù),用隨機(jī)不同的測(cè)試數(shù)據(jù)做測(cè)試比較。比較的指標(biāo)為關(guān)鍵字的比較次數(shù)、關(guān)鍵字的移動(dòng)次數(shù)和

7、所用時(shí)間。最后對(duì)這些內(nèi)部排序算法進(jìn)行性能分析。</p><p><b>  概要設(shè)計(jì)</b></p><p><b>  3.1、原始數(shù)據(jù)</b></p><p>  用戶輸入記錄的個(gè)數(shù),數(shù)據(jù)由隨機(jī)數(shù)產(chǎn)生器生成。</p><p><b>  3.2、輸出數(shù)據(jù)</b></p

8、><p>  產(chǎn)生的隨機(jī)數(shù)分別用直插排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序。這些排序方法進(jìn)行排序,輸出關(guān)鍵字的比較次數(shù)、移動(dòng)次數(shù)和所用時(shí)間。</p><p><b>  3.3、數(shù)據(jù)處理</b></p><p><b>  3.3、存儲(chǔ)結(jié)構(gòu)</b></p><p>  typedef st

9、ruct{</p><p><b>  int key;</b></p><p>  } RedType;</p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p>  4.1、各排序算法的基本思想</p><p><b>  1)直接插入排序</b>

10、;</p><p>  每次從無序表中取出第一個(gè)元素,把它插入到有序表的合適位置,使有序表仍然有序。第一趟比較前兩個(gè)數(shù),然后把第二個(gè)數(shù)按大小插入到有序表中; 第二趟把第三個(gè)數(shù)據(jù)與前兩個(gè)數(shù)從后向前掃描,把第三個(gè)數(shù)按大小插入到有序表中;依次進(jìn)行下去,進(jìn)行了(n-1)趟掃描以后就完成了整個(gè)排序過程。</p><p><b>  2) 希爾排序</b></p>

11、<p>  先取一個(gè)正整數(shù)d1<n,把所有序號(hào)相隔d1的數(shù)組元素放一組,組內(nèi)進(jìn)行直接插入排序;然后取d2<d1,重復(fù)上述分組和排序操作;直至di=1,即所有記錄放進(jìn)一個(gè)組中排序?yàn)橹梗?lt;/p><p><b>  3)冒泡排序</b></p><p>  冒泡排序的基本概念是:依次比較相鄰的兩個(gè)數(shù),將大數(shù)放在前面,小數(shù)放在后面。即首先比較第1個(gè)和第

12、2個(gè)數(shù),將大數(shù)放前,小數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將大數(shù)放前,小數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將大數(shù)放前,小數(shù)放后,此時(shí)第一趟結(jié)束,在最后的數(shù)必是所有數(shù)中的最小數(shù)。重復(fù)以上過程,仍從第一對(duì)數(shù)開始比較(因?yàn)榭赡苡捎诘?個(gè)數(shù)和第3個(gè)數(shù)的交換,使得第1個(gè)數(shù)不再大于第2個(gè)數(shù)),將大數(shù)放前,小數(shù)放后,一直比較到最小數(shù)前的一對(duì)相鄰數(shù),將大數(shù)放前,小數(shù)放后,第二趟結(jié)束,在倒數(shù)第二個(gè)數(shù)中得到一個(gè)新的最小數(shù)。如此下去,直至最終完成排序。由

13、于在排序過程中總是大數(shù)往前放,小數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。</p><p><b>  4)快速排序</b></p><p>  首先檢查數(shù)據(jù)列表中的數(shù)據(jù)數(shù),如果小于兩個(gè),則直接退出程序。如果有超過兩個(gè)以上的數(shù)據(jù),就選擇一個(gè)分割點(diǎn)將數(shù)據(jù)分成兩個(gè)部分,小于分割點(diǎn)的數(shù)據(jù)放在一組,其余的放在另一組,然后分別對(duì)兩組數(shù)據(jù)排序;</p><

14、p><b>  5)選擇排序</b></p><p> ?。?)在一組元素V[i]~V[n-1]中選擇具有最小排序碼的元素(2)若它不是這組元素中的第個(gè)元素,則將它與這一組元素中的第一個(gè)元素對(duì)調(diào);(3)在這組元素中剔除這個(gè)具有最小排序碼的元素,在剩下的元素V[i+1]~V[n-1]中重復(fù)執(zhí)行第(1)(2)步,直到剩余元素只有一個(gè)為止。</p><p><b

15、>  6) 堆排序</b></p><p>  堆排序是一樹形選擇排序,在排序過程中,將R[1..N]看成是一顆完全二叉樹的順序存儲(chǔ)結(jié)構(gòu),利用完全二叉樹中雙親結(jié)點(diǎn)和孩子結(jié)點(diǎn)之間的內(nèi)在關(guān)系來選擇最小的元素;堆的定義: N個(gè)元素的序列K1,K2,K3,...,Kn.稱為堆,當(dāng)且僅當(dāng)該序列滿足特性:Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2]);</p><p>&

16、lt;b>  4.2、程序代碼</b></p><p>  4.2.1 函數(shù)聲明</p><p>  #include <stdio.h></p><p>  #include <iostream.h></p><p>  #include <stdlib.h></p>&l

17、t;p>  #include <string.h></p><p>  #include <time.h></p><p>  #include <windows.h></p><p>  #include <winbase.h></p><p>  #include <iomani

18、p.h></p><p>  #define MAXSIZE 80</p><p>  #define TRUE 1</p><p>  #define FALSE 0</p><p>  typedef int BOOL;</p><p>  typedef struct{</p><p&g

19、t;<b>  int key;</b></p><p>  } RedType;</p><p>  class LinkList</p><p><b>  {</b></p><p><b>  public:</b></p><p>  RedT

20、ype r[MAXSIZE+1];</p><p>  int Length;</p><p>  int CmpNum, ChgNum;</p><p>  LinkList();</p><p>  bool LT(int i, int j);</p><p>  void Display();</p>

21、<p>  void Insert( int dk);</p><p>  void ShellSort();</p><p>  int Partition( int low, int high);</p><p>  void QSort( int low, int high);</p><p>  void QuickSo

22、rt();</p><p>  void HeapAdjust( int s, int m);</p><p>  void HeapSort();</p><p>  void BubbleSort();</p><p>  int SelectMinKey( int k);</p><p>  void SelSo

23、rt();</p><p>  void SelectSort();</p><p><b>  }; </b></p><p>  LinkList::LinkList(){</p><p><b>  int i;</b></p><p>  for (i = 0; i

24、<= MAXSIZE; i++)</p><p>  r[i].key = rand()%80;</p><p>  Length=MAXSIZE+1;</p><p><b>  CmpNum=0;</b></p><p><b>  ChgNum=0;</b></p><

25、;p><b>  }</b></p><p>  bool LinkList::LT(int i, int j){</p><p>  (CmpNum)++;</p><p>  if (i < j)</p><p>  return TRUE;</p><p><b>  

26、else</b></p><p>  return FALSE;</p><p><b>  }</b></p><p>  void LinkList::Display()</p><p><b>  {</b></p><p><b>  int j

27、;</b></p><p>  for(int i=0;i<=MAXSIZE;i++)</p><p><b>  {</b></p><p>  cout<<setw(6)<<r[i].key;</p><p>  if(++j%10==0)</p><p&

28、gt;  cout<<endl;</p><p><b>  }</b></p><p>  cout<<endl;</p><p><b>  }</b></p><p>  4.2.2六種排序算法代碼</p><p><b>  //插入

29、排序</b></p><p>  void LinkList::Insert(int dk){</p><p><b>  int i, j;</b></p><p>  RedType Temp;</p><p>  for (i = dk; i < Length; i++)</p>&

30、lt;p><b>  {</b></p><p>  if (LT(r[i].key, r[i - dk].key))</p><p><b>  {</b></p><p>  memcpy(&Temp, &r[i], sizeof(RedType));</p><p>  

31、for (j = i - dk; j >= 0 && LT(Temp.key, r[j].key); j -= dk)</p><p><b>  {</b></p><p>  (ChgNum)++;</p><p>  memcpy(&r[j + dk], &r[j], sizeof(RedType))

32、;</p><p><b>  }</b></p><p>  memcpy(&r[j + dk], &Temp, sizeof(RedType));</p><p><b>  }</b></p><p><b>  }</b></p><

33、p><b>  }</b></p><p><b>  //希爾排序</b></p><p>  void LinkList::ShellSort()</p><p><b>  {</b></p><p>  int t=Length+1;</p><

34、;p><b>  do{</b></p><p><b>  t=t/3+1;</b></p><p>  Insert( t);</p><p><b>  }</b></p><p>  while(t>1);</p><p><b

35、>  }</b></p><p><b>  //快速排序</b></p><p>  int LinkList::Partition(int low, int high){</p><p>  RedType Temp;</p><p>  int PivotKey;</p><p

36、>  memcpy(&Temp, &r[low], sizeof(RedType));</p><p>  PivotKey = r[low].key;</p><p>  while (low < high){</p><p>  while (low < high &&r[high].key >= Pivo

37、tKey){</p><p><b>  high--;</b></p><p>  (CmpNum)++;</p><p><b>  }</b></p><p>  (ChgNum)++;</p><p>  memcpy(&r[low], &r[high

38、], sizeof(RedType));</p><p>  while (low < high && r[low].key <= PivotKey){</p><p><b>  low++;</b></p><p>  (CmpNum)++;</p><p><b>  }<

39、;/b></p><p>  (ChgNum)++;</p><p>  memcpy(&r[high], &r[low], sizeof(RedType));</p><p><b>  }</b></p><p>  memcpy(&r[low], &Temp, sizeof(R

40、edType));</p><p>  return low;</p><p><b>  }</b></p><p>  void LinkList::QSort( int low, int high){</p><p>  int PivotLoc = 0;</p><p>  if (low

41、 < high){</p><p>  PivotLoc = Partition( low, high);</p><p>  QSort(low, PivotLoc - 1);</p><p>  QSort( PivotLoc + 1, high);</p><p><b>  }</b></p>

42、<p><b>  }</b></p><p>  void LinkList::QuickSort(){</p><p>  QSort(0, Length - 1);</p><p><b>  }</b></p><p><b>  //堆排序</b><

43、/p><p>  void LinkList::HeapAdjust(int s, int m){</p><p>  RedType Temp;</p><p>  int j = 0;</p><p><b>  s++;</b></p><p>  memcpy(&Temp, &

44、r[s - 1], sizeof(RedType));</p><p>  for (j = 2 * s; j <= m; j *= 2){</p><p>  if (j < m && LT(r[j - 1].key, r[j].key))</p><p><b>  ++j;</b></p><

45、;p>  if (!LT(Temp.key, r[j - 1].key))</p><p><b>  break;</b></p><p>  (ChgNum)++;</p><p>  memcpy(&r[s - 1], &r[j - 1], sizeof(RedType));</p><p>

46、<b>  s = j;</b></p><p><b>  }</b></p><p>  memcpy(&r[s - 1], &Temp, sizeof(RedType));</p><p><b>  }</b></p><p>  void LinkLi

47、st::HeapSort(){</p><p>  int i = 0;</p><p>  RedType Temp;</p><p>  for (i = Length / 2-1; i >= 0; i--)</p><p>  HeapAdjust(i, Length);</p><p>  for (i

48、= Length; i > 1; i--){</p><p>  memcpy(&Temp, &r[0], sizeof(RedType));</p><p>  (ChgNum)++;</p><p>  memcpy(&r[0], &r[i - 1], sizeof(RedType));</p><p&g

49、t;  memcpy(&r[i - 1], &Temp, sizeof(RedType));</p><p>  HeapAdjust( 0, i - 1);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //冒

50、泡排序</b></p><p>  void LinkList::BubbleSort(){</p><p><b>  int i, j;</b></p><p>  RedType temp;</p><p>  for (i = 1; i <= MAXSIZE; i++){</p>

51、<p>  for (j = 1; j <= MAXSIZE - i; j++){</p><p>  if (!LT(r[j].key, r[j + 1].key)){</p><p>  (ChgNum)++;</p><p>  memcpy(&temp, &r[j], sizeof(RedType));</p>

52、<p>  memcpy(&r[j], &r[j + 1], sizeof(RedType));</p><p>  memcpy(&r[j + 1], &temp, sizeof(RedType));</p><p><b>  }</b></p><p><b>  }</b>

53、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //選擇排序</b></p><p>  int LinkList::SelectMinKey( int i)</p><p><b>

54、;  {</b></p><p>  int Min = i;</p><p>  for (int k=i; k < Length; k++)</p><p><b>  {</b></p><p>  if (!LT(r[Min].key, r[k].key))</p><p&g

55、t;<b>  Min = k;</b></p><p><b>  }</b></p><p>  return Min;</p><p><b>  }</b></p><p>  void LinkList::SelSort(){</p><p>

56、<b>  int i, j;</b></p><p>  RedType temp;</p><p>  for (i = 0; i < Length; i++){</p><p>  j = SelectMinKey( i);</p><p>  if (i != j){</p><p>

57、;  (ChgNum)++;</p><p>  memcpy(&temp, &r[i], sizeof(RedType));</p><p>  memcpy(&r[i], &r[j], sizeof(RedType));</p><p>  memcpy(&r[j], &temp, sizeof(RedType))

58、;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.2.3 排序算法的選擇</p><p>  void LinkList::SelectSort(){<

59、;/p><p>  cout<<" 歡迎來到排序綜合系統(tǒng) "<<endl;</p><p>  cout<<"============================================ ="<<endl;</p><

60、p>  cout<<" 菜單 "<<endl;</p><p>  cout<<"============================================= "<<endl;</p><p>

61、  cout<<"1. 直接插入排序 "<<endl;</p><p>  cout<<"2. 希爾排序 "<<endl;</p><p>  cout

62、<<"3. 冒泡排序 "<<endl;</p><p>  cout<<"4. 快速排序 "<<endl;</p><p>  cout<

63、<"5. 選擇排序 "<<endl;</p><p>  cout<<"6. 堆排序 "<<endl;</p><p>  cout<<

64、;"7. 退出程序 "<<endl;</p><p>  cout<<"請(qǐng)選擇需要進(jìn)行的操作: "<<endl;</p><p><b>  }</b>&

65、lt;/p><p>  void LinkList::AllAbove(){</p><p>  int TempTime;</p><p>  int SpendTime;</p><p>  cout<<endl;</p><p>  LinkList();</p><p>  co

66、ut<<"插入排序:"<<endl;</p><p>  TempTime = (int)GetTickCount();</p><p>  Insert( 1);</p><p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  cou

67、t<<endl;</p><p>  cout<<"CompareNumber="<<CmpNum<<" "<<"ChageNumber="<<ChgNum<<" "<<"TimeSpent="<<Spend

68、Time<<"ms"<<endl;</p><p>  LinkList();//隨機(jī)數(shù)列復(fù)位</p><p>  cout<<endl;</p><p>  cout<<"希爾排序:"<<endl;</p><p>  TempTime =

69、(int)GetTickCount();</p><p>  ShellSort();</p><p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  cout<<endl;</p><p>  cout<<"CompareNumber=&quo

70、t;<<CmpNum<<" "<<"ChageNumber="<<ChgNum<<" "<<"TimeSpent="<<SpendTime<<"ms"<<endl;</p><p>  LinkList();

71、//隨機(jī)數(shù)列復(fù)位</p><p>  cout<<endl;</p><p>  cout<<"快速排序:"<<endl;</p><p>  TempTime = (int)GetTickCount();</p><p>  QuickSort();</p><

72、;p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  cout<<endl;</p><p>  cout<<"CompareNumber="<<CmpNum<<" "<<"ChageNumber="&

73、lt;<ChgNum<<" "<<"TimeSpent="<<SpendTime<<"ms"<<endl;</p><p>  LinkList();//隨機(jī)數(shù)列復(fù)位</p><p>  cout<<endl;</p><p&g

74、t;  cout<<"堆排序:"<<endl;</p><p>  TempTime = (int)GetTickCount();</p><p>  HeapSort();</p><p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>

75、  cout<<endl;</p><p>  cout<<"CompareNumber="<<CmpNum<<" "<<"ChageNumber="<<ChgNum<<" "<<"TimeSpent="<<

76、SpendTime<<"ms"<<endl;</p><p>  LinkList();//隨機(jī)數(shù)列復(fù)位</p><p>  cout<<endl;</p><p>  cout<<"冒泡排序:"<<endl;</p><p>  Tem

77、pTime = (int)GetTickCount();</p><p>  BubbleSort();</p><p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  cout<<endl;</p><p>  cout<<"CompareNu

78、mber="<<CmpNum<<" "<<"ChageNumber="<<ChgNum<<" "<<"TimeSpent="<<SpendTime<<"ms"<<endl;</p><p>  Li

79、nkList();//隨機(jī)數(shù)列復(fù)位</p><p>  cout<<endl;</p><p>  cout<<"選擇排序:"<<endl;</p><p>  TempTime = (int)GetTickCount();</p><p>  SelSort();</p&g

80、t;<p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  cout<<endl;</p><p>  cout<<"CompareNumber="<<CmpNum<<" "<<"ChageNumber=

81、"<<ChgNum<<" "<<"TimeSpent="<<SpendTime<<"ms"<<endl;</p><p><b>  }</b></p><p>  4.2.4主函數(shù)程序代碼</p><p&g

82、t;  void main(){</p><p>  int select = 0;</p><p>  int SpendTime = 0;</p><p>  int TempTime;</p><p><b>  do{</b></p><p>  LinkList L;</p>

83、<p>  L.SelectSort();</p><p>  cin>>select;</p><p>  switch (select)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>

84、  cout<<"插入排序前:"<<endl;</p><p>  L.Display();</p><p>  cout<<"插入排序后:"<<endl; </p><p>  TempTime = (int)GetTickCount();</p><p&

85、gt;  L.Insert(1);</p><p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  L.Display();</p><p>  cout<<endl;</p><p>  cout<<"比較次數(shù)="<<L.

86、CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間="<<SpendTime<<"ms"<<endl;</p><p><b>  break;</b><

87、;/p><p><b>  case 2:</b></p><p>  cout<<"希爾排序前:"<<endl;</p><p>  L.Display();</p><p>  cout<<"希爾排序后:"<<endl;</p&

88、gt;<p>  cout<<endl;</p><p>  TempTime = (int)GetTickCount();</p><p>  L.ShellSort();</p><p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  L.Displ

89、ay();</p><p>  cout<<endl;</p><p>  cout<<"比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間=&q

90、uot;<<SpendTime<<"ms"<<endl;</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  cout<<"冒泡排序前:"<<endl;&

91、lt;/p><p>  L.Display();</p><p>  cout<<"冒泡排序后:"<<endl;</p><p>  TempTime = (int)GetTickCount();</p><p>  L.BubbleSort();</p><p>  Spend

92、Time = (int)GetTickCount() - TempTime;</p><p>  L.Display();</p><p>  cout<<endl;</p><p>  cout<<"比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移

93、動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間="<<SpendTime<<"ms"<<endl;</p><p><b>  break;</b></p><p><b>  case 4:</b>

94、;</p><p>  cout<<"快速排序前:"<<endl;</p><p>  L.Display();</p><p>  cout<<"快速排序后:"<<endl;</p><p>  TempTime = (int)GetTickCount(

95、);</p><p>  L.QuickSort();</p><p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  L.Display();</p><p>  cout<<endl;</p><p>  cout<<"

96、;比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間="<<SpendTime<<"ms"<<endl;</p><p><b>

97、;  break;</b></p><p><b>  case 5:</b></p><p>  cout<<"選擇排序前:"<<endl;</p><p>  L.Display();</p><p>  cout<<"選擇排序后:&quo

98、t;<<endl;</p><p>  TempTime = (int)GetTickCount();</p><p>  L.SelSort();</p><p>  SpendTime = (int)GetTickCount() - TempTime;</p><p>  L.Display();</p><

99、;p>  cout<<endl;</p><p>  cout<<"比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間="<<SpendTim

100、e<<"ms"<<endl;</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>  cout<<"堆排序前:"<<endl;</p><p> 

101、 L.Display();</p><p>  cout<<"堆排序后:"<<endl;</p><p>  TempTime = (int)GetTickCount();</p><p>  L.HeapSort();</p><p>  SpendTime = (int)GetTickCount

102、() - TempTime;</p><p>  L.Display();</p><p>  cout<<endl;</p><p>  cout<<"比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgN

103、um<<" "<<"所需時(shí)間="<<SpendTime<<"ms"<<endl;</p><p><b>  break;</b></p><p><b>  default:</b></p><p> 

104、 cout<<"please input numbers again"<<endl;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p> 

105、 while(select!=7);</p><p><b>  }</b></p><p><b>  調(diào)試分析</b></p><p>  1.對(duì)正序、逆序和若干不同程度隨機(jī)打亂的可排序表,進(jìn)行各種排序方法的比較測(cè)試,得到的測(cè)試數(shù)據(jù)具有較好的典型性和可比較性。通過設(shè)計(jì)和實(shí)現(xiàn)指定程序的隨機(jī)亂序算法,對(duì)隨機(jī)數(shù)序列的產(chǎn)生有了

106、具體的認(rèn)識(shí)和實(shí)踐。</p><p>  2.將排序算法中的關(guān)鍵字比較和交換分別由兩個(gè)內(nèi)部操作實(shí)現(xiàn),較好的解決了排序算法的關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)的統(tǒng)計(jì)問題。</p><p>  3.本實(shí)習(xí)作業(yè)采用循序漸進(jìn)的策略,首先設(shè)計(jì)和實(shí)現(xiàn)可排序表的建立和隨機(jī)操作,然后用插入排序驗(yàn)證各種內(nèi)部輔助操作的正確性,進(jìn)而逐個(gè)加入其他排序算法,最后完成對(duì)測(cè)試結(jié)果的顯示。調(diào)試能力有了提高。</p>&

107、lt;p><b>  用戶手冊(cè) </b></p><p> ?。?)本程序的運(yùn)行環(huán)境為VC++。</p><p>  (2)進(jìn)入演示程序后,即顯示文本方式的用戶界面。</p><p> ?。?)演示程序以人機(jī)對(duì)話的形式進(jìn)行。只要輸入記錄的個(gè)數(shù),程序便產(chǎn)生80組隨機(jī)數(shù),顯示通過直插排序、冒泡排序、快速排序、選擇排序、堆排序?qū)﹄S機(jī)數(shù)進(jìn)行排序時(shí)

108、,關(guān)鍵字的比較次數(shù)、移動(dòng)次數(shù)的平均值和所用時(shí)間,從而直觀的比較各種內(nèi)部排序算法的優(yōu)劣。</p><p><b>  7.測(cè)試結(jié)果:</b></p><p>  7.1、進(jìn)入程序后即顯示文本方式的用戶界面:</p><p>  圖5.1 進(jìn)入程序后的界面</p><p>  7.2、開始運(yùn)行時(shí)的用戶界面:</p>

109、;<p>  1)輸入1回車,即得直接插入排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)和時(shí)間。如圖5.2:</p><p>  圖5.2 輸入1后的運(yùn)行結(jié)果</p><p>  2)輸入2回車,即得希爾排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.3:</p><p>  圖5.3 輸入2后的運(yùn)行結(jié)果</p><p&g

110、t;  3)輸入3回車,即得快速排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.4:</p><p>  圖5.4 輸入3后的運(yùn)行結(jié)果</p><p>  4)輸入4回車,即得堆排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.5:</p><p>  圖5.5 輸入4后的運(yùn)行結(jié)果</p><p>  5)輸入5回車,即

111、得冒泡排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.6:</p><p>  圖5.6 輸入5后的運(yùn)行結(jié)果</p><p>  6)輸入6回車,即得選擇排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.7:</p><p>  圖5.7 輸入6后的運(yùn)行結(jié)果</p><p>  7)輸入7回車,即退出該程序。</p

112、><p>  說明:從結(jié)果可以看出來,六種算法所用的時(shí)間均為零,這是因?yàn)榕判虻碾S機(jī)數(shù)太少,如果數(shù)再多點(diǎn),會(huì)有時(shí)間。</p><p><b>  8.附錄:</b></p><p>  在這次的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)中,排序綜合,通過該題目的設(shè)計(jì)過程,加深了對(duì)排序算法的理解,對(duì)排序算法上基本運(yùn)算的實(shí)現(xiàn)有所掌握,對(duì)課本中所學(xué)的各種數(shù)據(jù)結(jié)構(gòu)進(jìn)一步理解和掌握,學(xué)

113、會(huì)了如何把學(xué)到的知識(shí)用于解決實(shí)際問題,鍛煉了自己動(dòng)手的能力。</p><p><b>  參考書籍:</b></p><p>  [1]數(shù)據(jù)結(jié)構(gòu)——習(xí)題與解析,李春葆,清華大學(xué)出版社</p><p>  [2]數(shù)據(jù)結(jié)構(gòu),嚴(yán)蔚敏,吳偉民。北京:清華大學(xué)出版社</p><p>  [3] c/c++與數(shù)據(jù)結(jié)構(gòu),棧。王力柱,2

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論