排序综合数据结构课程设计论文

cout<<\选择排序\ cout<<\以上各种排序\ cout<<\退出程序\

cout<<\请选择需要进行的操作:\}

void LinkList::AllAbove(){ int TempTime; int SpendTime; cout<

cout<<\插入排序:\

TempTime = (int)GetTickCount(); Insert( 1);

SpendTime = (int)GetTickCount() - TempTime; cout<

cout<<\\ LinkList();//随机数列复位 cout<

cout<<\希尔排序:\

TempTime = (int)GetTickCount(); ShellSort();

SpendTime = (int)GetTickCount() - TempTime; cout<

cout<<\\ LinkList(); //随机数列复位 cout<

cout<<\快速排序:\

TempTime = (int)GetTickCount(); QuickSort();

SpendTime = (int)GetTickCount() - TempTime; cout<

cout<<\\ LinkList(); //随机数列复位 cout<

cout<<\堆排序:\

TempTime = (int)GetTickCount(); HeapSort();

SpendTime = (int)GetTickCount() - TempTime; cout<

cout<<\

- 15 -

\

\

\

\

15

\ LinkList(); //随机数列复位 cout<

cout<<\冒泡排序:\

TempTime = (int)GetTickCount(); BubbleSort();

SpendTime = (int)GetTickCount() - TempTime; cout<

cout<<\\ LinkList(); //随机数列复位 cout<

cout<<\选择排序:\

TempTime = (int)GetTickCount(); SelSort();

SpendTime = (int)GetTickCount() - TempTime; cout<

cout<<\\}

\

\

4.3.4主函数程序代码

void main(){ int i,j;

int select = 0;

int SpendTime = 0; int TempTime; do{ LinkList L; L.SelectSort(); cin>>select; switch (select) {

case 1:

cout<<\插入排序前:\ L.Display();

cout<<\插入排序后:\ TempTime = (int)GetTickCount(); L.Insert(1);

SpendTime = (int)GetTickCount() - TempTime; L.Display(); cout<

cout<<\比较次数=\\关键字移动次数=\\

- 16 -

16

所需时间=\ break; case 2: cout<<\希尔排序前:\ L.Display();

cout<<\希尔排序后:\ cout<

TempTime = (int)GetTickCount(); L.ShellSort();

SpendTime = (int)GetTickCount() - TempTime; L.Display(); cout<

cout<<\比较次数=\\关键字移动次数=\\所需时间=\ break; case 3: cout<<\快速排序前:\ L.Display();

cout<<\快速排序后:\ TempTime = (int)GetTickCount(); L.QuickSort();

SpendTime = (int)GetTickCount() - TempTime; L.Display(); cout<

cout<<\比较次数=\\关键字移动次数=\\所需时间=\ break; case 4: cout<<\堆排序前:\ L.Display(); cout<<\堆排序后:\

TempTime = (int)GetTickCount(); L.HeapSort();

SpendTime = (int)GetTickCount() - TempTime; L.Display(); cout<

cout<<\比较次数=\\关键字移动次数=\\所需时间=\ break; case 5:

cout<<\冒泡排序前:\ L.Display(); cout<<\冒泡排序后:\ TempTime = (int)GetTickCount();

- 17 -

17

L.BubbleSort();

SpendTime = (int)GetTickCount() - TempTime; L.Display(); cout<

cout<<\比较次数=\\关键字移动次数=\\所需时间=\ break; case 6:

cout<<\选择排序前:\ L.Display(); cout<<\选择排序后:\ TempTime = (int)GetTickCount(); L.SelSort();

SpendTime = (int)GetTickCount() - TempTime; L.Display(); cout<

cout<<\比较次数=\\关键字移动次数=\\所需时间=\ break; case 7: L.AllAbove(); break; default: cout<<\ break; } } while(select!=8); }

4运行结果

4.1调试分析

1.对正序、逆序和若干不同程度随机打乱的可排序表,进行各种排序方法的比较测试,得到的测试数据具有较好的典型性和可比较性。通过设计和实现指定程序的随机乱序算法,对伪随机数序列的产生有了具体的认识和实践。

2.将排序算法中的关键字比较和交换分别由Less和Swap两个内部操作实现,较好的解决了排序算法的关键字比较次数和移动次数的统计问题。而赋值是

- 18 - 18

直接统计的。

3.本实习作业采用循序渐进的策略,首先设计和实现可排序表的建立和随机操作,然后用插入排序验证各种内部辅助操作的正确性,进而逐个加入其他排序算法,最后完成对测试结果的显示。调试能力有了提高。

4.2输入输出

1.进入程序后即显示文本方式的用户界面:

图5.1 进入程序后的界面

2.开始运行时的用户界面:

1)输入1回车,即得直接插入排序的排序结果及其关键字比较次数和移动次数和时间。如图5.2:

图5.2 输入1后的运行结果

2)输入2回车,即得希尔排序的排序结果及其关键字比较次数和移动次数

- 19 -

19

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4