gpt4 book ai didi

c - 对文件进行快速排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:33:43 24 4
gpt4 key购买 nike

我想对一个文件使用我的快速排序,但没有任何反应。我的 quiksort 工作,我已经尝试使用随机生成的数组。

typedef double *TABLEAU;


TABLEAU charge_tableau(char *s, int nb_elts) {
FILE *f = NULL;
TABLEAU t=malloc(nb_elts*sizeof(double));
f=fopen("data22", "r");
int i;
for(i=0; i<nb_elts; i++)
fscanf(f,"%lf", t+i);
fclose(f);
return t;
}


void permuter(TABLEAU t, int i, int j){
int tmp;
tmp=t[i];
t[i]=t[j];
t[j]=tmp;
}


/* quicksort */
int partition(TABLEAU t, int m, int n){
int pivot, i, j;
pivot = t[m];
i = m+1;
for(j= m+1; j < n; j++){
if(t[j] <= pivot){
permuter(t, i, j);
i++;
}
}

permuter(t, m, i-1);
return i-1;
}


void triRapide(TABLEAU t, int nb_elts, int m, int n){
int indPivot;
if(m<n){
indPivot = partition(t, m, n);
triRapide(t, nb_elts, m, indPivot-1);
triRapide(t, nb_elts, indPivot+1, n);
}
}


int main() {

TABLEAU t;
int nb_elts=10, m, n;
t=charge_tableau("data22", nb_elts);
triRapide(t, nb_elts,m,n);
return 0;

}

文件是这样的:

0.612248 0.052802 0.442505 0.189728 0.750432 0.508627 0.491031 0.762011 0.119391 0.603284 0.394294 0.893904 0.842861 0.966140 0.920210 0.973909 0.489751 0.250233 0.671843 0.657750 0.799485 0.947670 0.492462 0.816764 0.351214 0.852527 0.424567 0.701987 0.287918 0.040396 0.928470 0.800661

问题是我的函数 TABLEAU charge_tableau(char *s, int nb_elts)

最佳答案

您从 main() 开始调用函数 tri_rapide(),传递未初始化变量 m 的不确定值n 作为参数。看起来你想要这个:

triRapide(t, nb_elts, 0, nb_elts);

此外,您的 partition() 函数将 pivot 声明为 int 类型,但类型 TABLEAU 是一个double * 的别名。因此,您截断了枢轴元素的值。对于您的特定数据,这将在每种情况下截断 所有 有效数字,因此在每次分区时,除主元以外的所有元素都将分配给上分区(在您的实现中,不需要移动它们)。

还要注意,函数 triRapide() 的第二个参数绝对没有用。除了在递归时传递它之外,您什么都不做。

关于c - 对文件进行快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40182318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com