排序综合

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

2008/2009学年度第二学期

《数据结构》课程设计

说明书

题目:排序综合

班级:

姓名:

学号:

指导教师:

日期:09.6.22~~09.6.27

计算机系与信息工程

1、问题描述

2、需求分析

3、开发环境

4、算法设计思想

5、流程图

6、课程设计过程中的关键算法

7、测试及结果

8、总结与收获

9、参考文献

10、指导教师评语

附件一:程序清单

#include

#include

#include

#include

using namespace std;

const int N=20000;

#define ElemType int

void quicksort(ElemType R[],int left, int right) //快速查找{

int i=left,j=right;

ElemType temp=R[i];

while(i

{

while((R[j]>temp)&&(i

j--;

if(i

R[i++]=R[j];

while((R[i]<=temp)&&(i

i++;

if(i

R[j--]=R[i];

}

R[i]=temp;

if(left

quicksort(R,left,i-1);

if(i+1

quicksort(R,i+1,right);

}

void creatheap(ElemType R[],int i,int n)

{

int j;

ElemType t;

t=R[i];

j=2*(i+1)-1;

while(j<=n)

{

if((j

j++;

if(t

{

R[i]=R[j];

i=j;

j=2*(i+1)-1;

}

else

j=n+1;

}

R[i]=t;

}

void heapsort(ElemType R[],int n) //堆排序

{

int i;

ElemType t;

for(i=n/2-1;i>=0;i--)

creatheap(R,i,n-1);

for(i=n-1;i>=1;i--)

{

t=R[0];

R[0]=R[i];

R[i]=t;

creatheap(R,0,i-1);

}

}

void merge(ElemType R[],ElemType A[],int s,int m,int t){

int i,j,k;

i=s;j=m+1;k=s;

while((i<=m)&&(j<=t))

if(R[i]<=R[j])

{

A[k]=R[i];

i++;k++;

}

else

{

A[k]=R[j];

j++;k++;

}

while(i<=m)

{

A[k]=R[i];

i++;k++;

}

while(j<=t)

{

A[k]=R[j];

j++;k++;

}

}

void mergepass(ElemType R[],ElemType A[],int n,int c) //归并排序{

int j,i;

i=0;

while(i+2*c-1<=n-1)

{

merge(R,A,i,i+c-1,i+2*c-1);

i+=2*c;

}

if(i+c-1

merge(R,A,i,i+c-1,n-1);

else

for(j=i;j<=n-1;j++)

A[j]=R[j];

}

void mergesort(ElemType R[],int n)

{

int c=1;

ElemType A[N];

while(c

{

mergepass(R,A,n,c);

c*=2;

mergepass(A,R,n,c);

c*=2;

}

}

void print(ElemType R[],int n)

{

for(int i=0;i<=n-1;i++)

{

if(i%10==0)

{

cout<

}

cout<

}

cout<

}

inline unsigned __int64 GetCycleCount() {

__asm _emit 0x0F

__asm _emit 0x31

}

void main()

{

char ch;

ElemType R[N],T[N];

unsigned long t,t1,t2;

double tt1,tt2,tt3;

LARGE_INTEGER tc;

QueryPerformanceFrequency(&tc);

srand(GetCycleCount());

for(int i=0;i<=N-1;i++)

T[i]=rand();

print(T,N);

cout<<"快速排序开始(y/n)";

cin>>ch;

if(ch=='y')

{

for(i=0;i<=N;i++)

R[i]=T[i];

t1=(unsigned long)GetCycleCount();

quicksort(R,0,N-1);

t2=(unsigned long)GetCycleCount();

t=t2-t1;

tt1=(double)t*1000/tc.QuadPart;

print(R,N);

ofstream outfile("E:\123",ios::out); if(! outfile)

{

cerr<<"open error!"<

exit(1);

}

for(int i=0;i<20000;i++)

{

相关文档
最新文档