数据结构课程设计排序算法演示系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 设计目的

随着计算机技术的发展,各种排序算法不断的被提出。排序算法在计算机科学中有非常重要的意义,且应用很广泛。在以后的发展中排序对我们的学习和生活的影响会逐渐增大,很有必要学习排序知识。此次课程设计一方面使自己掌握排序的知识,另一方面锻炼一下团队合作开发系统的能力。

2.1 设计内容和要求

设计内容:

(1)实现各种内部排序。包括直接插入排序,希尔排序,冒泡排序,快速排序,直接选择排序,归并排序,堆排序。

(2)待排序的元素的关键字为整数或(字符)。可用随机数据和用户输入数据作测试比较。比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换以3次计)。

(3)演示程序以人机对话的形式进行。每次测试完毕显示各种比较指标值的列表,以便比较各种排序的优劣。

3. 本设计所采用的数据结构

typedef struct

{

int key;

}RecType;

4. 功能模块详细设计

4.1 详细设计思想

主函数:

#include

#include

#include

#define L 8 //排序元素个数

#define FALSE 0

#define TRUE 1

typedef struct

{

int key;

}RecType;

RecType R[L];

int num;

int sum;

int sun; //定义排序趟数的全局变量

//主函数

int main()

{

Seqlist S;

int i,k;

char ch1,ch2,q;

printf("\n\t\t 排序算法演示系统\n\n\t\t请输入%d个待排序的数据:",L);

for(i=1;i<=L;i++)

{

scanf("%d",&S[i].key);

getchar();

printf("\t\t");

}

ch1='y';

while(ch1=='y')

{ printf("\n");

printf("\n\t\t 菜单\n");

printf("\n\t\t***********************************************\n");

printf("\n\t\t 1--------更新排序数据2--------直接插入排序\n");

printf("\n\t\t 3--------希尔排序4--------冒泡排序\n");

printf("\n\t\t 5--------快速排序6--------直接选择排序\n");

printf("\n\t\t 7--------堆排序8--------归并排序\n");

printf("\n\t\t *** 0--------退出*** \n");

printf("\n\t\t***********************************************\n");

printf("\n\t\t请选择:");

scanf("%c",&ch2);

getchar();

for(i=1;i<=L;i++)

{

R[i].key=S[i].key;

}

switch(ch2)

{

case '1':

printf("\n\t\t请输入%d个待排序数据\n\t\t",L);

for(i=1;i<=L;i++)

{

scanf("%d",&S[i].key);

getchar();

printf("\t\t");

}

printf("\n\t\t数据输入完毕!");

break;

case '2':

Insertsort();

break;

case '3':

Shellsort();

break;

case '4':

Bubblesort();

break;

case '5':

printf("\n\t\t原始数据为(按回车键开始排序):\n\t\t");

for(k=1;k<=L;k++)

{

printf("%5d",R[k].key);

}

getchar();

printf("\n");

num=0;sun=0;sum=0;

Quicksort(1,L);

printf("\n\t\t排序最终结果是:\n\t\t");

for(k=1;k<=L;k++)

{

printf("%5d",R[k].key);

}

printf("\n\t\t比较次数是:%d\n\t\t",sum);

printf("\n\t\t交换次数是:%d\n\t\t",sun);

break;

case '6':

Selectsort();

break;

case '7':

Heap();

break;

case '8':

Mergesort();

break;

case '0':

ch1='n';

break;

default:

system("cls");//清屏

printf("\n\t\t对不起,您输入有误,请重新输入!\n");

break;

}

if(ch2!='0')

{

if(ch2=='2'||ch2=='3'||ch2=='4'||ch2=='5'||ch2=='6'||ch2=='7'||ch2=='8')

{

printf("\n\n\t\t排序完毕!");

printf("\n\t\t按回车键继续!");

q=getchar();

if(q!='\n')

{

getchar();

ch1='n';

}

}

}

}

return 1;

}

相关文档
最新文档