基于c语言的插入排序算法的优化

基于c语言的插入排序优化问题,统计该排序算法所进行的数组元素间比较次数,复制次数,并利用参数(不使用全局变量)“返回”统计结果。同时,用不同规模(如:从1024开始逐次倍增至65536),多种构型测试数据进行算法测试,然后分析算法测试结果,包括算法的时间复杂度,空间复杂度,排序算法的稳定性,及对数据构型的“适用性”

img

你题目的解答代码如下:

#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;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img