數(shù)據(jù)結構課程設計報告--排序_第1頁
已閱讀1頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  數(shù)據(jù)結構</b></p><p><b>  課程設計報告</b></p><p><b>  題目</b></p><p><b>  排序</b></p><p><b>  需求分析</b><

2、/p><p><b>  2.1、選題要求</b></p><p> ?。?)設計一個菜單,格式如下:</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、 ?。?)選擇不同的菜單進行相應的排序,并給出排序的關鍵字序列。</p><p>  2.2、選題的意義及背景</p><p>  排序是計算機程序設計中的一種重要操作。它的功能是將一個數(shù)據(jù)元素的任意序列,重新排列成一個按關鍵字有序的序列。</p><p>  排序的方法很多,但是就其全面性能而言,很難提出一種被認為是最好的方法,每一種方法都有各自的優(yōu)缺點,適合在不

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

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

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

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

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

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

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

12、2個數(shù),將大數(shù)放前,小數(shù)放后。然后比較第2個數(shù)和第3個數(shù),將大數(shù)放前,小數(shù)放后,如此繼續(xù),直至比較最后兩個數(shù),將大數(shù)放前,小數(shù)放后,此時第一趟結束,在最后的數(shù)必是所有數(shù)中的最小數(shù)。重復以上過程,仍從第一對數(shù)開始比較(因為可能由于第2個數(shù)和第3個數(shù)的交換,使得第1個數(shù)不再大于第2個數(shù)),將大數(shù)放前,小數(shù)放后,一直比較到最小數(shù)前的一對相鄰數(shù),將大數(shù)放前,小數(shù)放后,第二趟結束,在倒數(shù)第二個數(shù)中得到一個新的最小數(shù)。如此下去,直至最終完成排序。由

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

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

15、>  6) 堆排序</b></p><p>  堆排序是一樹形選擇排序,在排序過程中,將R[1..N]看成是一顆完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系來選擇最小的元素;堆的定義: N個元素的序列K1,K2,K3,...,Kn.稱為堆,當且僅當該序列滿足特性: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<<"請選擇需要進行的操作: "<<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();//隨機數(shù)列復位</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、//隨機數(shù)列復位</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();//隨機數(shù)列復位</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();//隨機數(shù)列復位</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();//隨機數(shù)列復位</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<<" "<<"關鍵字移動次數(shù)="<<L.ChgNum<<" "<<"所需時間="<<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<<" "<<"關鍵字移動次數(shù)="<<L.ChgNum<<" "<<"所需時間=&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<<" "<<"關鍵字移

93、動次數(shù)="<<L.ChgNum<<" "<<"所需時間="<<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<<" "<<"關鍵字移動次數(shù)="<<L.ChgNum<<" "<<"所需時間="<<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<<" "<<"關鍵字移動次數(shù)="<<L.ChgNum<<" "<<"所需時間="<<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<<" "<<"關鍵字移動次數(shù)="<<L.ChgN

103、um<<" "<<"所需時間="<<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>  調試分析</b></p><p>  1.對正序、逆序和若干不同程度隨機打亂的可排序表,進行各種排序方法的比較測試,得到的測試數(shù)據(jù)具有較好的典型性和可比較性。通過設計和實現(xiàn)指定程序的隨機亂序算法,對隨機數(shù)序列的產生有了

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論