谁可以帮助解释我的代码中出了什么问题.计算C ++中的数组
who can help to explain what is wrong in my code..counting sort of array in c++
在这里我写了一个对数组进行排序的代码,但有些问题,我不明白出了什么问题,请解释一下。
#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;
}
它必须通过索引对数组进行排序
int max = array[0];
这会max
数组的第一个元素,而不是最后一个元素。因此,当这行代码运行时:
int count[max - min + 1] = {};
count
的大小始终为 1。
将其更改为:
int max = array[length - 1];
此外,C++不支持可变长度数组;只有一些编译器扩展了对它的支持。在编译这些编译器时,数组的大小必须是固定常量。如果要使用 VLA,请改用std::vector
。
函数countingSort
大约有 50% 的行有错误。
你的count
数组总是只有一个(array[0] - array[0] + 1
)元素。 这意味着在读取或写入索引 0 之外时,您有未定义的行为。
(可变长度数组是非标准扩展。了解如何使用std::vector
.)
直到确定最大值和最小值的循环完成之后,您才知道最大值和最小值。
在该循环之后移动数组声明。
此外,您需要修复该循环,因为它不一定找到最小值(array[i] <= max
并不意味着您已经找到了最小值)。
例如,您将拥有示例输入的min == 6
。
计数循环需要
for (int i = 0; i < length; i++)
因为你正在循环array
,它有length
元素。
您需要调整计数器,因为最小值对应于索引 0,但不一定为 0:
count[array[i] - min]++;
而"结果收集"循环应该是
for (int j = 0;j < max - min + 1;j++)
因为count
有max - min + 1
元素,你需要
array[sum++] = min + j;
因为第一个元素计算min
出现次数,而不是零。
我认为这涵盖了你的大部分问题。
(还有一个旁注:"sum"是一个非常奇特的名字,指的是不是总和的东西。
#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;
}
我在某些地方改进了它,但它没有给我一个输出 6,7,8,9,10,6...
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- c++无值sort()的问题是什么?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 什么是钻石问题?是一系列问题还是特定问题?
- 格式说明符C++有什么问题
- 我应该在 main 函数中写什么来测试我的问题?
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 方法问题 - 什么会改变值,什么不会改变?什么是无效的?