当前位置:文档之家› 数据结构课程设计各种排序算法比较 附带源代码

数据结构课程设计各种排序算法比较 附带源代码

{
if(a[j]>=a[j+1])
{
w=a[j];
a[j]=a[j+1];
a[j+1]=w;
}
}
}
}
/*************************冒泡排序函数*************************/
void bubble_sort(int a[])
{
printf("\n下面使用冒泡排序法进行排序:");
总体算法思想为按功能分块,依照预想功能实现顺序拼装。
具体思想请见流程图。
流程图
功能流程图
程序编写流程图
算法流程图
算法设计分析
程序总体采用模块化设计,程序间通过传参和调用进行有机组合。这样的总体布局将将各个功能隔离开来,每个模块负责每个模块的功能,使得程序的布局简单明了。且子程序只有在被调用时才会运行大大节约系统资源减少了运算时间。同时由于功能的隔离使得程序的扩展性大大提高,无论程序将要任何改动时,都会方便很多。
}
for (k=n-1; k>=1; k--)
{
t = *(x+0); /*堆顶放到最后*/
*(x+0) = *(x+k);
*(x+k) = t;
sift(x,k,0); /*剩下的数再建堆*/
}
}
/*************************归并排序****************************/
{
double t1,t2,t;int i;
t1=(double) clock();
if(choice==1)
direct(a);
if(choice==2)
bubble_sort(a);
if(choice==3)
choices_sort(a);
if(choice==4)
{
printf("\n现在使用快速排序法进行排序:\n");
{
for(i=0;i<=30000;i++)
{a[i]=aaa[i];
aa[i].key=aaa[i];}
main1();
}
if (choice1==2)
{
printf("谢谢使用,再见!!");
}
}
/**************************生成随机数函数**********************/
/*************************直接插入排序函数***********************/
void direct(int a[]){
printf("\n现在使用直接插入排序法进行排序:\n");
int i,j,w;
for(i=0;i<30000;i++)
{
for(j=i;j>=0;j--)
void choices_sort(int a[])
{ printf("\n现在使用选择排序法进行排序:\n");
int i,j,k,t;
for(i=0;i<30000;i++)
{
k=i;
for(j=i+1;j<30000;j++)
if(a[k]>a[j])
k=j;
t=a[i];
a[i]=a[k];
t1=(double) clock();
scanf("%d",&choice);
timer(choice);
printf("\n\n排序完毕,请选择下一步您要完成的工作:\n\n1.返回选择另一种排序方法排序\n2.退出\n");
scanf("%d",&choice1);
menu(choice1);
}
/*************************主函数******************************/
int listmerge(struct xlx list[],int first,int second)/*递归传递*/
{
int start=30000;
while(first!=-1&&second!=-1)
if(list[first].key<=list[second].key)
{
list[start].link=first;
while (j<n)
{
if (j<n-1 && *(x+j) < *(x+j+1)) /*判断是否满足堆的条件:满足就继续下一轮比较,否则调整。*/
{
j++;
}
if (t<*(x+j)) /*调整*/
{
*(x+k) = *(x+j);
k = j; /*调整后,开始元素也随之调整*/
j = 2*k + 1;
L[left]=key;
return left;
}
void quick_sort(int L[],int first,int end)
{
int split;
if(first<end)
{ split=quick(first,end,L);
quick_sort(L,first,split-1);
quick_sort(L,split+1,end);
for(j=0;i<30000;j++)
{
b=rand();
if(b>=l&&b<=h)
{
a[i]=b;
aa[i].key=b;
aaa[i]=b;
i++;
}
}
for(i=0;i<30000;i++)
printf("%d ",a[i]);
}
void main1(){
printf("\n\n请选择你所希望使用的排序方法:\n\n1。直接插入排序\n2。冒泡排序\n3。选择排序\n4。快速排序\n5。堆排序\n6。归并排序\n");
return list[30000].link;
}
int rmerge(struct xlx list[],int lower,int upper) /*归并并返回已排序的结果数组的起始位置*/
{
int middle;
if(lower>=upper)
return lower;
else{
middle=(lower+upper);
源代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int a[30000];
int choice;
int choice1;
struct xlx{
int key;
int link;
} aa[30000];
int aaa[300000];
void main1();
printf("%d ",a[i]);
printf("\n排序结束您所用排序时间为:%f秒\n",t);
}
/**************************菜单函数***************************/
void menu(int choice1)
{
int i;
if (choice1==1)
void sjs()
{
int i=0,j,b,h,l;
printf("请输入你所期望的将要生成随机数的取值范围:\n");
printf("最小值(不能为负数):");
scanf("%d",&l);
printf("最大值(无上限):");
scanf("%d",&h);
srand( (int) time(0));
return listmerge(list,rmerge(list,lower,middle),
rmerge(list,middle+1,upper));
}
}
/*************************时间计算函数************************/
void timer(int choice)
int i,j,w;
for(i=0;i<30000;i++)
for(j=0;j<30000-i;j++)
if(a[j]>a[j+1])
{
w=a[j];
a[j]=a[j+1];
a[j+1]=w;
}
}
/*************************选择排序****************************/
{ while((left<right)&&(L[right]>=key))
right--;
if(left<right)
L[left++]=L[right];
while((left<right)&&(L[left]<=key))
left++;
if(left<right)L[right--]=L[left];}
相关主题