(数据结构)随机产生n个数,用4种方法排序,比较各种排序的效率

2025-04-14 22:14:55
推荐回答(1个)
回答1:

#ifndef sort_h //(作用:防止h被重复引用)
#define sort_h
#include
using namespace std;
void slook(int*main,int len)
{
for(int i=0;icout<}

//冒泡排序
void bb_sort( int*main,int len)
{
int temp;
for(int j=0;j {
for(int i=0;i {
if(main[i]>main[i+1])
{
temp=main[i];
main[i]=main[i+1];
main[i+1]=temp;
}
}
}
}
//直接插入排序
void insert_sort(int *main,int len)
{int temp;
for(int j=1;j {
for(int i=j;i>0;i--)
if(main[i] {
temp=main[i-1];
main[i-1]=main[i];
main[i]=temp;
}
}
}
//折半插入排序
void bi_insert_sort(int *main,int len)
{
int temp;
for(int j=1;j {
for(int i=j;i>0;i--)
{
if(main[i] {
int head=0;
int rear=i;
for(int mid;head {
mid=(rear+head)/2;
if(main[mid] >=main[i]) rear=mid;
else head=mid+1;
}
temp=main[i];
int k=i;
for(;k>head;k--)
{
main[k]=main[k-1];
}
main[head]=temp;
}}
}

}
//快速里分二分之一的程序段
int partition(int *main,int low,int high)
{
main[0]=main[low];
int e=main[low];
while(low {
while(low=e)--high;
main[low]=main[high];
while(low main[high]=main[low];
}
main[low]=main[0];
return low;
}
//快速排序
void kqsort(int *main,int low,int high)
{
if(low {
int e=partition(main,low,high);
kqsort(main,low,e-1);
kqsort(main,e+1,high);
}
}

bool sort()
{
cout< int len;
int *main;
cout< cin>>len;
error(len);
main=(int*)malloc(len*sizeof(int));
for(int i=0;i {
cout<<"请输入第"< cin>>main[i];
error(main[i]);
}
int menu=-1;
while(menu!=0)
{

cout<<"查看原数组,请按-->1"< cout<<"进入“直接插入排序”请按-->2"< cout<<"进入“折半插入排序”请按-->3"< cout<<"进入“冒泡排序”请按-->4"< cout<<"进入“快速排序”请按-->5"< cout<<"随机生成3000个元素判断查找速度,请按-->6"< cout<<"退出请按-->0"< cin>>menu;
error(menu);
cout< if(menu>6||menu<0)cout<
else{

switch(menu)
{
case 1:
slook(main,len);
break;
case 2:
insert_sort(main,len);
slook(main,len);
break;
case 3:
bi_insert_sort(main,len);
slook(main,len);
break;
case 4:
bb_sort(main,len);
slook(main,len);
break;
case 5:
int* mai=(int*)malloc((len+1)*sizeof(int));
for(int i=len+1;i>1;i--)mai[i]=main[i-1];
kqsort(mai,0,len);
slook(mai,len);
for(int i=len+1;i>1;i--)main[i-1]=mai[i];

}
}}

return 0;
}
#endif