Home > database >  Why does this merge sort code keeps giving me this weird output?
Why does this merge sort code keeps giving me this weird output?

Time:09-16

I wrote the count sort code but it is showing me weird output, can you tell where I am wrong ??

#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;
}

It gives output like this -

The sorted array is  ->  0x7bfdd0

ScreenShot of the code and the output

CodePudding user response:

When trying to print the array, you cannot just use std::cout << a. At the moment your code is printing the memory address of the array a, which is not what you want.

To fix the problem, print all elements of the array, one by one. These loops can be helpful:

for (const auto& elem : a)
    std::cout << elem << " ";

Or

for (int i = 0; i < sizeof(a) / sizeof(int); i  )
    std::cout << a[i] << " ";

CodePudding user response:

Your code have two fault.

  1. print array method is wrong.
  2. third loop is wrong in CountSort. this loop working only once.

There is fix result.

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;
}

result:

The sorted array is  ->  0 0 0 1 1 1 2 2 2 2 4 5 7 7 8 9 9 
  •  Tags:  
  • c
  • Related