#include <iostream>
#include <string>
#include <vector>
using namespace std;
void MCounting_Sort(vector<int>& A)
{
const int size = A.size();
int min = A[0];
for (int i = 1; i < size; i++)
if (A[i] < min)
min = A[i];
for (int i = 0; i < size; i++)
A[i] = A[i] - min;
int max = A[0];
for (int i = 1; i < size; i++)
if (A[i] > max)
max = A[i];
int* C = new int[max + 1]{ 0 };
for (int i = 0; i < size; i++)
C[A[i]] = C[A[i]] + 1;
int* B = new int[size];
int pos = 0;
for (int i = 0; i < max + 1; i++)
if (C[i] > 0)
for (int j = 0; j < C[i]; j++)
B[pos++] = i; // <-- C6386 Buffer overrun...
for (int i = 0; i < size; i++)
A[i] = B[i] + min; // <-- C6001 Using uninitialized memory "B"
delete[] B;
delete[] C;
}
int main()
{
vector<int> A {7,2,18,5};
for(unsigned int i=0; i<A.size(); i++) cout<<A[i]<<" ";
cout<<endl;
MCounting_Sort(A);
for(unsigned int i=0; i<A.size(); i++) cout<<A[i]<<" ";
}
output:
7 2 18 5
2 5 7 18
The sorting algorithm works (also for negative numbers), but I get these two warnings, I'm not sure if I can fix them, because the algorithm itself probably isn't good, but it's a school assignment. Maybe I did write something wrong though.