为什么这个合并排序代码总是给我这个奇怪的输出?
Why does this merge sort code keeps giving me this weird output?
我写了计数排序代码,但它显示奇怪的输出,你能告诉我哪里错了吗??
#include <bits/stdc++.h>
using namespace std;
void CountSort(int a[], int n, int k)
{
int count[k + 1]={0};
int b[n];
for (int i = 0; i < n; i++)
{
++count[a[i]];
}
for (int i = 1; i <= k; i++)
{
count[i] += count[i - 1];
}
for (int i = 0; i >= 0; i--)
{
b[count[a[i]]-1] = a[i];
--count[a[i]];
}
for (int i = 0; i < n; i++)
{
a[i] = b[i];
}
}
int main()
{
int a[] = {2, 1, 1, 0, 2, 5, 4, 0, 2, 8, 7, 7, 9, 2, 0, 1, 9};
CountSort(a, 17, 9);
cout<<"The sorted array is -> "<<a;
return 0;
}
它给出这样的输出 -
The sorted array is -> 0x7bfdd0
ScreenShot of the code and the output
尝试打印数组时,不能只使用 std::cout << a
。目前您的代码正在打印数组 a
的内存地址,这不是您想要的。
要解决此问题,请一一打印数组的所有元素。这些循环可能会有帮助:
for (const auto& elem : a)
std::cout << elem << " ";
或者
for (int i = 0; i < sizeof(a) / sizeof(int); i++)
std::cout << a[i] << " ";
你的代码有两个错误。
- 打印数组的方法错误
- 第三个循环在
CountSort
中是错误的。这个循环只工作一次。
有修复结果
void CountSort(int a[], int n, int k)
{
int count[k + 1]={0};
int b[n];
for (int i = 0; i < n; i++)
{
++count[a[i]];
}
for (int i = 1; i <= k; i++)
{
count[i] += count[i - 1];
}
for (int i = 0; i < n; i++)
{
b[count[a[i]]-1] = a[i];
--count[a[i]];
}
for (int i = 0; i < n; i++)
{
a[i] = b[i];
}
}
int main()
{
int a[] = {2, 1, 1, 0, 2, 5, 4, 0, 2, 8, 7, 7, 9, 2, 0, 1, 9};
CountSort(a, 17, 9);
cout<<"The sorted array is -> ";
for (int i = 0; i < 17; ++i) {
cout << a[i] << ' ';
}
cout << endl;
return 0;
}
结果:
The sorted array is -> 0 0 0 1 1 1 2 2 2 2 4 5 7 7 8 9 9
我写了计数排序代码,但它显示奇怪的输出,你能告诉我哪里错了吗??
#include <bits/stdc++.h>
using namespace std;
void CountSort(int a[], int n, int k)
{
int count[k + 1]={0};
int b[n];
for (int i = 0; i < n; i++)
{
++count[a[i]];
}
for (int i = 1; i <= k; i++)
{
count[i] += count[i - 1];
}
for (int i = 0; i >= 0; i--)
{
b[count[a[i]]-1] = a[i];
--count[a[i]];
}
for (int i = 0; i < n; i++)
{
a[i] = b[i];
}
}
int main()
{
int a[] = {2, 1, 1, 0, 2, 5, 4, 0, 2, 8, 7, 7, 9, 2, 0, 1, 9};
CountSort(a, 17, 9);
cout<<"The sorted array is -> "<<a;
return 0;
}
它给出这样的输出 -
The sorted array is -> 0x7bfdd0
ScreenShot of the code and the output
尝试打印数组时,不能只使用 std::cout << a
。目前您的代码正在打印数组 a
的内存地址,这不是您想要的。
要解决此问题,请一一打印数组的所有元素。这些循环可能会有帮助:
for (const auto& elem : a)
std::cout << elem << " ";
或者
for (int i = 0; i < sizeof(a) / sizeof(int); i++)
std::cout << a[i] << " ";
你的代码有两个错误。
- 打印数组的方法错误
- 第三个循环在
CountSort
中是错误的。这个循环只工作一次。
有修复结果
void CountSort(int a[], int n, int k)
{
int count[k + 1]={0};
int b[n];
for (int i = 0; i < n; i++)
{
++count[a[i]];
}
for (int i = 1; i <= k; i++)
{
count[i] += count[i - 1];
}
for (int i = 0; i < n; i++)
{
b[count[a[i]]-1] = a[i];
--count[a[i]];
}
for (int i = 0; i < n; i++)
{
a[i] = b[i];
}
}
int main()
{
int a[] = {2, 1, 1, 0, 2, 5, 4, 0, 2, 8, 7, 7, 9, 2, 0, 1, 9};
CountSort(a, 17, 9);
cout<<"The sorted array is -> ";
for (int i = 0; i < 17; ++i) {
cout << a[i] << ' ';
}
cout << endl;
return 0;
}
结果:
The sorted array is -> 0 0 0 1 1 1 2 2 2 2 4 5 7 7 8 9 9