永发信息网

求数据结构课程设计(C语言)—排序综合!利用随机函数产生N个随机整数(2万以上),至少使用三种方法实现

答案:2  悬赏:40  手机版
解决时间 2021-03-23 09:46
  • 提问者网友:难遇难求
  • 2021-03-22 20:37
求数据结构课程设计(C语言)—排序综合!利用随机函数产生N个随机整数(2万以上),至少使用三种方法实现
最佳答案
  • 五星知识达人网友:雪起风沙痕
  • 2021-03-22 21:21
冒泡法
#include
#include
#include
#define N 10000
void init_array(int a[N],int n)
{
int i;
srand(time(NULL));
for(i=0;i a[i]=rand()%N;
}
}
void sort(int a[N],int n)
{
int i,j;
int t;
for(i=0;i for(j=0;j if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
void display(int a[N],int n)
{
int i;
for(i=0;i printf("%d\n",a[i]);
}
}
int main()
{
int array[N];
init_array(array,N);
sort(array,N);
display(array,N);
return 0;
}

快速排序
#include
#include
#include
#define N 100240
int small_array[N];
int big_array[N];
void my_list(int a[],int n)
{
int i;
srand(time(NULL));
for(i=0;i a[i]=rand()%n;
}
int my_quick(int a[],int start,int end)
{
int i,eq;
int small_count=0,big_count=0;
eq=a[start];
if(start>=end) return;
for(i=start+1;i<=end;i++){
if(a[i] small_array[small_count]=a[i];
small_count++;
}
else{
big_array[big_count]=a[i];
big_count++;
}
}
for(i=0;i a[start+i]=small_array[i];
a[start+small_count]=eq;
for(i=0;i a[start+i+small_count+1]=big_array[i];
my_quick(a,start,start+small_count-1);
my_quick(a,start+small_count+1,end);

}
void display(int a[],int n)
{
int i;
for(i=0;i printf("%d\n",a[i]);
}
int main()
{
int array[N];
my_list(array,N);
my_quick(array,0,N-1);
display(array,N);
}

归并排序
#include
#include
#include
#define N 100240
void inti_list(int array[N],int n)
{
int i;
srand(time(NULL));
for(i=0;i array[i]=rand()%N;
}
}
void merge(int a[N],int l_start,int l_end,int r_end)
{
int i;
int n=l_start;
int temp[N];
int r_start=l_end+1;
int m=r_start;
for(i=n;i<=r_end;i++){
if(n<=l_end&&m<=r_end){
if(a[n] temp[i]=a[n];
n++;
}
else{
temp[i]=a[m];
m++;
}
}
else{
if(n>l_end){
temp[i]=a[m];
m++;
}
else if(m>r_end){
temp[i]=a[n];
n++;
}
}

}
for(i=l_start;i<=r_end;i++){
a[i]=temp[i];
}
}
int msort(int a[N],int start,int end)
{
if(start==end) return 0;
msort(a,start,(start+end)/2);
msort(a,(start+end)/2+1,end);
merge(a,start,(start+end)/2,end);
}
void display(int a[N],int n)
{
int i;
for(i=0;i printf("%d\n",a[i]);
}
}
int main()
{
int array[N];
inti_list(array,N);
msort(array,0,N-1);
display(array,N);
return 0;
}
选择排序

#include
#include
#include
#define N 10240
void inti_list(int array[],int n)
{
int i;
srand(time(0));
for(i=0;i array[i]=rand()%100000;
}
}
void buuble(int array[],int n)
{
int i,j,k,t,min;
for(i=0;i min=array[i];
for(j=i+1;j if(array[j] min=array[j];
k=j;
}
}
t=array[k];
array[k]=array[i];
array[i]=t;

}
}
void display(int array[],int n)
{
int i;
for(i=0;i printf("%d\n",array[i]);
}

}
int main()
{
int n=N;
int array[N];
inti_list(array,n);
buuble(array,n);
display(array,n);
return 0;
}

堆排序

#include
#include
#include
#define N 10240
void heap_sort(int a[],int i)
{
int t;
if(i==1) return;
if(a[i] t=a[i];
a[i]=a[i/2];
a[i/2]=t;
heap_sort(a,i/2);
}
else{
return;
}
}
void init_array(int a[],int n)
{
int i;
srand(time(NULL));
for(i=1;i<=n;i++){
a[i]=rand()%N;
}
}
void init_sort(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
heap_sort(a,i);
}
void display(int a[],int n)
{
int i;
for(i=n;i>=1;i--)
printf("%d\n",a[i]);
}
void h_sort(int a[],int i,int j,int k,int n)
{
int t;
if(n if(n if(a[j]>=a[i]) return;
if(a[j] t=a[j];
a[j]=a[i];
a[i]=t;
return;
}
}
if(a[i]<=a[k]&&a[i]<=a[j]) return;
else{
if(a[j]<=a[k]){
t=a[j];
a[j]=a[i];
a[i]=t;
h_sort(a,j,2*j,2*j+1,n);
}
else if(a[j]>a[k]){
t=a[k];
a[k]=a[i];
a[i]=t;
h_sort(a,k,2*k,2*k+1,n);
}
}
}
void heapsort(int a[],int n)
{
int t;
t=a[n];
a[n]=a[1];
a[1]=t;
h_sort(a,1,2,3,n-1);
return;
}
int main()
{
int i;
int array[N+1];
init_array(array,N);
init_sort(array,N);
for(i=N;i>=1;i--){
heapsort(array,i);
}
display(array,N);
return 0;
}

够了吧 记得给我加分 还给你运行过了
全部回答
  • 1楼网友:怀裏藏嬌
  • 2021-03-22 21:40
给你发了 不只3种 给你5种了 363173922的 记得给我加分 有问题加我再给你解决 没分就免谈 好了都给你搞定了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯