Question:
I’m trying to work with pointers and references, this program is for me to test out radix sort using parallelism. However, it’s only sort the 1st half of the array.
Repl link:
#include <iostream>
using namespace std;
void rSort(int *a, int size, int b[]){
//sort from 1st digit
int d = 1;
int m = b[0];
//find max
for (int i = 0; i < size; i++)
{
if (b[i] > m)
{
m = b[i];
}
}
//radix sort
while (m/d > 0){
int count[10] = {0};
for (int i = 0; i < size; i++){
count[(a[i]/d)%10]++;
}
for (int i = 1; i < 10; i++){
count[i] += count[i-1];
}
for (int i = size-1; i >= 0; i--){
b[count[(a[i]/d)%10] - 1] = a[i];
count[(a[i]/d)%10]--;
}
for (int i = 0; i < size; i++){
a[i] = b[i];
}
d *= 10;
}
}
int main(){
int a[10] = {0,3,2,6,1,9,7,5,8,4};
int size = 10/2;
int start;
int end;
//partition the array A into 2, and call to sort them individually
for (int i = 0; i < 2; i++){
int b[size];
start = i*size;
end = start+size;
for (int j = start; j < end; j++){
b[j] = a[j];
}
rSort(a, size, b);
}
//gonna work on the merge later
for (int i = 0; i < 10; i++)
cout<< a[i] << " ";
return 0;
}
**Output: **
0 1 2 3 6 9 7 5 8 4