C++ 谁能帮我解释代码中的错误..计算c+中的数组类型+;

C++ 谁能帮我解释代码中的错误..计算c+中的数组类型+;,c++,arrays,sorting,counting,C++,Arrays,Sorting,Counting,在这里,我写了一个对数组进行排序的代码,但有些地方出了问题,我不明白出了什么问题,请给我解释一下 #include <iostream> using namespace std; void printArray(int array[], int length){ for (int i = 0; i < length; i++) cout << array[i]; cout << endl; } /* min and

在这里,我写了一个对数组进行排序的代码,但有些地方出了问题,我不明白出了什么问题,请给我解释一下

#include <iostream>
using namespace std;

void printArray(int array[], int length){

    for (int i = 0; i < length; i++)
        cout << array[i];
    cout << endl;
}

/* min and max values which are the first and the last elements of the array*/
void countingSort(int array[], int length){

    int max = array[0];
    int min = array[0];
    int count[max - min + 1] = {};
    int sum = 0;

    for (int i = 0; i < length; i++){
        if (array[i] > max)
            max = array[i];
        else
            min = array[i];
    }
    /* the new array with indexes*/
    for (int i = 0; i < max - min + 1; i++){
        count[array[i]]++;  
    }

    for (int j = 0;j < max - min;j++)
    {
        while(count[j] --) 
        array[sum++] = j;           
    }
}

int main() {

    int array[] = {4,7,8,9,10,6};
    countingSort(array, 6);
    printArray(array,6);
    return 0;
}
#包括
使用名称空间std;
void printary(int数组[],int长度){
for(int i=0;imax
设置为数组的第一个元素,而不是最后一个。因此,当这行代码运行时:

int count[max - min + 1] = {};
count
的大小始终为1

将其更改为:

int max = array[length - 1];
<> P>也可以说,C++支持<强>>不/强>支持变长数组;只有一些编译器支持了它。在编译时,数组的大小必须是固定的常数。如果你想使用VLAS,请使用<代码> STD::向量< />代码> 这将
max
设置为数组的第一个元素,而不是最后一个。因此,当这行代码运行时:

int count[max - min + 1] = {};
count
的大小始终为1

将其更改为:

int max = array[length - 1];

<> P>也有,C++做了<>强>不/强>支持变长数组;只有一些编译器支持了它。编译时编译时数组的大小必须是固定的常数。如果要使用VLAS,请使用<代码> STD::向量< /代码>。< /P> < P>函数>代码> CopyType 大约50%的线路有bug

您的
count
数组始终只有一个(
array[0]-array[0]+1
)元素。 这意味着您在读取或写入索引0之外的内容时有未定义的行为。
(可变长度数组是非标准扩展。了解如何使用
std::vector

直到确定最大值和最小值的循环完成后,您才知道最大值和最小值。
将数组声明移动到该循环之后


另外,您需要修复该循环,因为它不一定会找到最小值(
array[i]函数
countingSort
大约有50%的行有bug

您的
count
数组始终只有一个(
array[0]-array[0]+1
)元素。 这意味着您在读取或写入索引0之外的内容时有未定义的行为。
(可变长度数组是非标准扩展。了解如何使用
std::vector

直到确定最大值和最小值的循环完成后,您才知道最大值和最小值。
将数组声明移动到该循环之后

此外,还需要修复该循环,因为它不一定会找到最小值(
array[i]
#include)
使用名称空间std;
void printary(int数组[],int长度){
for(int i=0;i
听起来你可能需要学习如何使用调试器来完成你的代码。用一个好的调试器,你可以逐行地执行你的程序,看看它偏离了你所期望的地方。如果你要做任何编程,这是一个必不可少的工具。进一步的阅读:@所有C++的Radik Harutyunyan Firdt不支持Vari。一些编译器有支持可变长度数组的单语言扩展,但是这个声明没有意义int count[max-min+1]={};因为声明的数组只包含一个元素。@VladFrommosco它没有帮助听起来您可能需要学习如何使用调试器来逐步完成代码。有了一个好的调试器,您可以逐行执行程序,并查看它与您期望的偏离。如果您要进一步的阅读:“所有C++的Radik Harutyunyan Firdt不支持可变长度数组。有些编译器有一个支持扩展长度数组的语言扩展,但是这个声明没有意义,int计数[ max -min +1 ]={}。;因为声明的数组只包含一个元素。@VladfromMoscow它无助于我使用int max=array[0]来查找array@RadikHarutyunyan在这种情况下,max总是等于min,如
intmax=array[0];
intmin=array[0]
,您将它们都设置为相同的值。我已检查它是否返回int中的max和min元素array@RadikHarutyunyan编译器是否提供了任何错误消息?没有任何错误((我使用int max=array[0]来查找array@RadikHarutyunyan在这种情况下,max总是等于min,如
intmax=array[0];
int min=array[0]
,您将它们都设置为相同的值。我已经检查过它返回int的max和min元素array@RadikHarutyunyan编译器是否提供任何错误消息?没有任何错误((我改进了我的代码,但它不起作用。我改进了我的代码,但它不起作用。我无法编译您的代码并对其进行操作以在我的iPad上找到逻辑错误,因此很难确切地告诉您哪里出了错。但是,您可以访问以下链接:。它包含一些代码,您可以与您的代码进行比较以找到错误源。Unfert当然,我无法编译您的代码并对其进行操作以在我的iPad上找到逻辑错误,因此很难确切地告诉您哪里出错了。但是,您可以访问以下链接:。它包含一些代码,您可以与您的代码进行比较以找到错误源。
count[array[i] - min]++; 
for (int j = 0;j < max - min + 1;j++)
array[sum++] = min + j;
#include <iostream>
using namespace std;

void printArray(int array[], int length){
        for (int i = 0; i < length; i++)
                cout << array[i];
                cout << endl;
}


void countingSort(int array[], int length){

        int max = array[length - 1];
        int min = array[0];
        int count[100] = {};
        int sum = 0;

        for (int i = 0; i < length; i++){
                 if( array[i] > max)
                        max = array[i];
                 else
                        min = array[i];
        }
         for (int i = 0; i < length; i++){
                  count[array[i] - min]++;
         }
         for (int j = 0;j < max - min + 1;j++)
    {
            while(count[j] --)
            array[sum++] = min + j;
    }

}






      int main() {
      int array[] = {4,7,8,9,10,6};
      countingSort(array, 6);
     printArray(array,6);


     return 0;
      }