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;
}