为什么这个基数排序不起作用
Why this radixSort doesn't work
看起来还可以,但结果却有所不同。真的,我不知道它怎么了。也许是因为我在晚上2点写的。。。
编辑:
template <class T>
void radixSort(T & arr, msize numberBase)
{
long maxValue = findMax(arr);
dynarray<long> tarr(arr,arr.size());
dynarray<long> presenceTable(numberBase+1);
for (register long i=0, max=presenceTable.size(); i<max; ++i)
{
presenceTable[i] = 0;
}
for (register long exp=1; maxValue/exp>0; exp*=numberBase)
{
for (register long i=0, max=tarr.size(); i<max; ++i)
{
++(presenceTable[(tarr[i]/exp)%numberBase]);
}
for (register long i=1, max=presenceTable.size(); i<max; ++i)
{
presenceTable[i] += presenceTable[i-1];
}
for (register long i=0, max=tarr.size(); i<max; ++i)
{
arr[ (--(presenceTable[(tarr[i]/exp)%numberBase])) ] = tarr[i];
}
tarr = arr;
for (register long i=0, max=presenceTable.size(); i<max; ++i)
{
presenceTable[i] = 0;
}
}
}
尝试此代码中的算法:
#include<bits/stdc++.h>
using namespace std;
// Function to get maximum value in array a[].
int getmax(int a[], int n)
{
int max = a[0];
for (int x=1; x<n; x++)
if (a[x] > max)
max = a[x];
return max;
}
// Function to do counting sort according to significant digits repesented by
// exp (where exp is 10^i).
void CountSort(int a[], int n, int exp)
{
int result[n], i, count[10] = {0};
// Counting occurence of digits
for (i =0; i <n; i++)
count[(a[i] / exp) % 10]++;
// Changing the position of count so that it appears at actual position in result.
for (i =1; i<10; i++)
count[i] += count[i-1];
// Resultant output array
for (i =n-1; i>= 0; i--)
{
result[count[(a[i] / exp) % 10] - 1] = a[i];
count[(a[i] / exp) % 10]--;
}
for (i =0; i <n; i++)
a[i] = result[i];
}
// Radix Sort to sort a[] of given size.
void radixsort(int a[], int n)
{
int exp, i;
i = getmax(a, n);
for (exp = 1; i/exp > 0; exp *= 10)
CountSort(a, n, exp);
}
// Driver Program
int main()
{
int n;
cout<<" Enter the number of elements to be sorted: ";
cin>>n;
int a[n];
cout<<"n Enter the elements: ";
for(int i =0; i <n; i++)
{
cin>>a[i];
}
radixsort(a, n);
// Printing the sorted list.
cout<<"nSorted List: ";
for (int i = 0; i < n; i++)
cout<<a[i]<<", ";
return 0;
}
我对它做了一点更改,它对我有效。
相关文章:
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- 使用选择排序对数组数据结构进行排序,但它不起作用
- c++ 选择排序在特定情况下不起作用
- 为什么当我们使用等于'='符号比较器函数时,c ++的内置排序函数不起作用?
- C++插入排序错误功能不起作用
- 我正在编写一个拆分为 3 的合并排序,我不知道为什么它不起作用
- 为什么我的替代排序算法不起作用?
- 堆排序它不起作用或计算不正确
- C++ ceil() 在傀儡排序中不起作用
- 合并两个排序的列表 - 不起作用
- 排序功能不起作用
- 气泡排序不传递数据或不起作用
- 外壳排序算法不起作用
- 排序不起作用 c++
- 我已经在 C++ 中实现了合并排序。它没有错误,但不知何故不起作用
- 在 C++ 中使用 10 个随机整数的数组进行气泡排序不起作用
- 合并排序在 C++ 中不起作用
- 合并排序wih pthreads在C 中不起作用
- 为什么这个基数排序不起作用