我寫了計數排序的代碼,但它顯示了奇怪的輸出,你能告訴我哪里錯了嗎?
#include <bit/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<<"排序后的陣列是->"<<a。
return 0;
}
它的輸出是這樣的 -
排序后的陣列是 -> 0x7bfdd0。
uj5u.com熱心網友回復:
當試圖列印陣列時,你不能只使用std::cout << a。此刻你的代碼正在列印陣列的記憶體地址a,這不是你想要的東西。
為了解決這個問題,請逐一列印陣列的所有元素。這些回圈可能是有幫助的:
for (const auto& elem : a)
std::cout << elem << " "/span>;
或者
for (int i = 0; i < sizeof(a) / sizeof(int); i )
std::cout << a[i] << "。
uj5u.com熱心網友回復:
你的代碼有兩個錯誤。
- print陣列方法是錯誤的。
- 第三個回圈在
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<<"排序后的陣列是-> "。
for (int i = 0; i < 17; i) {
cout << a[i] << ' '/span>;
}
cout <<endl;
return 0;
}
結果:
排序的陣列是->。 0 0 0 1 1 1 2 2 2 2 4 5 7 7 8 9 9
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/306751.html
標籤:
