c - 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;
}
解决方案
推荐阅读
- javascript - 每次追加如何计算索引以及何时删除它可以重置js中的整个索引
- google-chrome-extension - 如何设置 chrome-extension cookie 权限
- javascript - 将 JSON 对象添加到外部文件中的现有数组
- python - 在python中运行程序时导入错误出现以下错误消息
- python - 如何将 django.contrib.auth 中的现有用户与 Python Social Auth(Google 后端)相关联?
- java - MockRestServiceServer 是否支持双向 TLS,如果支持,如何配置?
- python - Python:从 json/dictionary 创建 csv
- javascript - TypeError:无法读取未定义的属性“tapAsync”
- java - 为什么我不能将数据从数据库加载到jsp文件?
- python - 将 2 个数据框组合到 1 个带有 2 个工作表的 excel 工作簿中