问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编写程序用直接插入排序的算法进行排序。

发布网友 发布时间:2022-04-24 03:49

我来回答

1个回答

热心网友 时间:2022-04-19 02:17

#include<stdio.h>
#include<time.h>
#include<math.h>
#include<malloc.h>

void BubbleSort(int *L,int N)
{ //冒泡
int i,j;
int t;

for(i=1;i<=N;i++)
{
for(j=N;j>i;j--)
if(L[j]<L[j-1])
{
t=L[j];
L[j]=L[j-1];
L[j-1]=t;
}
}
}

int SelectMinKey(int *L,int N,int n)
{
int i,min=n;

for(i=n+1;i<=N;i++)
if(L[i]<L[min])
min=i;

return min;
}

void SelectSort(int *L,int N)
{ //选择
int i,j;
int t;

for(i=1;i<N;i++)
{
j=SelectMinKey(L,N,i);
if(i!=j)
{
t=L[i];
L[i]=L[j];
L[j]=t;
}
}
}

void InsertSort(int *L,int N)
{ //插入
int i,j;

for(i=2;i<=N;i++)
{
if(L[i]<L[i-1])
{
L[0]=L[i];
L[i]=L[i-1];
for(j=i-2;L[0]<L[j];j--)
L[j+1]=L[j];
L[j+1]=L[0];
}
}
}

void ShellInsert(int *L,int N, int dk)
{ // 对顺序表L作一趟希尔插入排序。本算法对算法10.1作了以下修改:
// 1. 前后记录位置的增量是dk,而不是1;
// 2. r[0]只是暂存单元,不是哨兵。当j<=0时,插入位置已找到。
int i,j;
for(i=dk+1;i<=N;++i)
if(L[i]<L[i-dk])
{ // 需将L.r[i]插入有序增量子表
L[0]=L[i]; // 暂存在L.r[0]
for(j=i-dk;(j>0&&L[0]<L[j]);j-=dk)
L[j+dk]=L[j]; // 记录后移,查找插入位置
L[j+dk]=L[0]; // 插入
}
} // ShellInsert

void ShellSt(int *L,int N, int dlta[], int t)
{ // 算法10.5
// 按增量序列dlta[0..t-1]对顺序表L作希尔排序。
for(int k=0;k<t;++k)
ShellInsert(L,N, dlta[k]); // 一趟增量为dlta[k]的插入排序
} // ShellSort

void ShellSort(int *L,int N)
{ //希尔
int t=(int)log(N);
int k,*dlta;

dlta=(int*)malloc(t*4); //产生增量序列
for(k=0;k<t;k++)
dlta[k]=(int)pow(2,t-k)-1;

ShellSt(L,N,dlta,t);
}

int main()
{
int N=250;
int i,j,k;
int t;
int ti[16];
int *L;

srand(time(NULL));

printf("长度\t|冒泡\t|选择\t|插入\t|希尔\n");
printf("--------+-------------------------------------------------------------");
for(j=0;N<100000;j++)
{
L=(int *)malloc((N+1)*4);

t=0;

for(i=1;i<=N;i++)
L[i]=rand();
ti[t++]=clock();
BubbleSort(L,N);
ti[t++]=clock();

for(i=1;i<=N;i++)
L[i]=rand();
ti[t++]=clock();
SelectSort(L,N);
ti[t++]=clock();

for(i=1;i<=N;i++)
L[i]=rand();
ti[t++]=clock();
InsertSort(L,N);
ti[t++]=clock();

for(i=1;i<=N;i++)
L[i]=rand();
ti[t++]=clock();
ShellSort(L,N);
ti[t++]=clock();

printf("\n%d\t",N);
for(k=0;k<4;k++)
printf("| %d\t",(ti[2*k+1]-ti[2*k]));

N*=5;
}
printf("\n\n");
}

//这是我们当年学数据结构时我自己写的,给你改了一下,输出是对随机产生一些数,对四种算法进行比较,有问题可以hi我啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... C语言直接插入排序 单链表的直接插入排序的算法。问题 数据结构 直接插入排序这个算法如何用主程序调用 求直接插入排序算法等流程图 数据结构 直接插入排序的排序过程问题 直接插入排序的算法描述 在对n个元素进行直接插入排序的过程中,共需要进行___趟。 直接插入排序,初学者,很简单,如图,给出每一趟的详细过程。。。 写出直接插入排序的算法InsertSort (int a[],int n)。 插入排序的设计步骤 简单插入排序算法流程图 手机号更换怎么更换呢 用WPS如何在每节后面标脚注? wps如何设置讲义注释页面 手机号更换怎么更换呢 汽车遥控钥匙有个no和off是什么? 荣威钥匙上的on和off什么功能 电水壶插头发烫是怎么回事? 烧水壶插头发热是不是正负线连错了 新买的水壶烧水发白怎么办 数据结构 直接插入排序 排序过程问题 函数insertsort使用直接插入排序法对n个数据进行升序排序,请将程序补充完整。 void i 关于直接插入排序算法 直接插入排序算法中的疑问 皂角米,桃胶,雪燕,燕窝,雪蛤没有矿泉水用什么水泡发呢需要泡多久,皂仁角米不放糖好吃吗 皂角米怎么食用 如何通过工行微信银行开通免密查询? 通过工行个人网上银行如何关闭短信银行免密查询功能? 怎样关闭工行微信银行免密查询? 怎样关闭工行微信/短信银行免密查询? 中国工商银行免密查询功能是什么意思? 工行微信银行绑定了微信ID而且开通了免密查询是怎么回事? 开通工行e缴费小额免密功能的方法 如何开通工行e缴费小额免密功能? 工商银行怎样在网上查已经办理的业务? 开通工行e缴费小额免密功能的用途 罗尼香川在哪里直播 斗鱼炉石主播恩基爱狗贼的真名 安德罗尼有教学视频吗 月经走后5天子宫内膜厚度5MM正常吗