基于c语言的插入排序优化问题,统计该排序算法所进行的数组元素间比较次数,复制次数,并利用参数(不使用全局变量)“返回”统计结果。同时,用不同规模(如:从1024开始逐次倍增至65536),多种构型测试数据进行算法测试,然后分析算法测试结果,包括算法的时间复杂度,空间复杂度,排序算法的稳定性,及对数据构型的“适用性”
你题目的解答代码如下:
#include<stdio.h>
void insertsort(int a[], int n, int *c1, int *c2)
{
int i, j, temp;
*c1=0;
*c2=0;
for(i=1;i<n;i++)
{
(*c1)++;
if(a[i]<a[i-1])//如果后面出现比前面小的数字
{
temp=a[i];
for(j=i-1;temp<a[j]&&j>=0;j--)//把前面的数字移动,挪出一个合适的位置给a[i]
{
(*c2)++;
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
}
int main(void)
{
int i,c1,c2;
int a[10]={1,2,0,3,4,5,6,7,9,8};
printf("排序前:");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n\n\n");
insertsort(a, 10, &c1,&c2);
printf("排序后:");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n\n\n");
printf("总计数据比较%d次\n\n", c1);
printf("总计数据交换%d次\n\n", c2);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!