首页 > 解决方案 > C.二进制插入排序

问题描述

请告诉我错误是什么。程序返回一个巨大的值,而不是 0,并创建一个空的 excel 文件。

(如果有的话,那么程序的本质是,对不同数量的元素使用Binary Insertion排序并输出swap和comps的平均值)

我将非常感谢编辑。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int binarySearch(int* arr,int elem, int start, int end, int* comps)
{
    (*comps)++;
    if (end <= start)
    {
        (*comps) ++;
        return (elem > arr[start])? (start + 1): start;
    } 
    
    int mid = (start + end)/2;
    (*comps)++;
    if(elem == arr[mid]) return mid+1;
    (*comps)++;
    if(elem > arr[mid]) return binarySearch(arr, elem, mid+1, end, comps);
    return binarySearch(arr, elem, start, mid-1, comps);
}

int main(int argc, char *argv[]) {

    FILE *f=fopen("stat8.csv","w");
    int n=100;
    int i,s;
    while (n<=10000){
    int st=0;
    for (s=0;s<5;s++)
    {
        int *a;
        a=(int *)malloc(n*sizeof(int));
        srand(time(NULL));
        int k;
        for (k=0;k<n;k++)
        {
            *(a+i)=rand()%50;
        }
        int j,comps,swaps;
        swaps=0;
        comps=0;
for( i = 1; i < n; i++)
    {
        int j = i - 1;
        int selected = a[i];
        int loc = binarySearch(a,selected,0,j,comps);
        while(j >= loc)
        {
            comps++;
            swaps++;
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = selected;
        comps++;
    }
    st+=swaps + comps;  
}
        
    st=st/5;
    fprintf(f,"%d ; %d\n", n , st);
    if (n<1000){
        n+=100;}
    else {n+=1000;} 
    }
    fclose(f);
    return 0;
}

标签: cinsertinsertion-sort

解决方案


推荐阅读