gpt4 book ai didi

C中的计数排序只能对前4个数字进行排序

转载 作者:行者123 更新时间:2023-11-30 14:53:13 25 4
gpt4 key购买 nike

我正在使用计数排序来对数字进行排序的 C 程序,这是我的代码,我使用外部 txt 文件进行输入。库 arrayio.h 是给定的输入代码。

#include <stdio.h>
#include <stdlib.h>
#include "arrayio.h"

int MAX_LAENGE = 1000;
int MAX_VALUE = 100;
int i,j,k;

void count_sort_calculate_counts(int input_array[], int len, int count_array[]) {
for (i=0; i<len;i++) {
count_array[i] = 0;
}
for (j=0; j<len;j++) {
count_array[input_array[j]] = count_array[input_array[j]] + 1;
}
}

void count_sort_write_output_array(int output_array[], int len, int count_array[]) {
k=0;
for (j=0;j<len;j++) {
for (i=0; i<count_array[j]; i++) {
output_array[k] = j;
k = k + 1;
}
}
}

int main(int argc, char *argv[]) {
if (argc < 2){
printf("Aufruf: %s <Dateiname>\n", argv[0]);
printf("Beispiel: %s zahlen.txt\n", argv[0]);
exit(1);
}
char *filename = argv[1];

int input_array[MAX_LAENGE];
int len = read_array_from_file(input_array, MAX_LAENGE, filename);

printf("Unsortiertes Array:");
print_array(input_array, len);

int count_array[MAX_LAENGE];
int output_array[MAX_LAENGE];
count_sort_calculate_counts(input_array, len, count_array);
count_sort_write_output_array(output_array, len, count_array);

printf("Sortiertes Array:");
print_array(output_array, len);
return 0;
}

我的问题是,当我运行这个程序时,它只返回前 4 个数字。例如,当我输入:

90 38 42 34 8 0 77 1 84 5 25 72 44 42 90 63 23

它返回:

0 1 5 8 0 0 0 0 0 0 0 0 0 0 0 0 0

最佳答案

错误出现在将计数分配回输出数组的代码中。您在达到原始数组的长度时结束计数迭代,而您应该在达到最大值时结束它:

void count_sort_write_output_array(int output_array[], int len, int count_array[]){
k=0;
for (j=0;j<MAX_LAENGE;j++)
{
for (i=0; i<count_array[j]; i++)
{
output_array[k++] = j;
}
}
}

Demo.

要获得一些“风格分数”,请考虑将计数数组隐藏在单个排序函数中,该函数计算计数并将值分配回输出数组。毕竟,计数是代码的用户不应该感兴趣的中间结果,因此您不应该要求排序函数的用户分配它。

关于C中的计数排序只能对前4个数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47315816/

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