I want to print a sorted array in C using count sort but my code is not working ! I watched a tutorial of the countsort algorithm and copied the code from the video but for some reason my code is not working while the code runs in the video . I also wrote comments based on the work that the part of the code is doing in this script. The output should be the given array and a sorted array on next line
#include<stdio.h>
#include<limits.h>
#include<stdlib.h>
void displayArray(int *arr,int size){
printf("[ ");
for(int i=0; i<size; i ){
printf("%d ",arr[i]);
}
printf("]\n");
}
int maximum(int A[], int size){
int max = INT_MIN;
for(int i=0; i<size; i ){
if(max < A[i]){
max = A[i];
}
}
return max;
}
void countSort(int* A, int size){
int i,j;
// Find the maximum element in Array
int max = maximum(A,size);
// Create the count array
int* count = (int*) malloc((max 1)*sizeof(int));
// Initialize the count array elements to zero
for(i=0; i < size 1; i ){
count[i] = 0;
}
// Increment the corrosponding index in the count array
for(i=0; i<size; i ){
count[A[i]] = count[A[i]] 1;
}
i = 0; // Counter for count array
j = 0; // Counter for given array
while(i <= max){
if(count[i] > 0){
A[j] = i;
count[i] = count[i] - 1;
j ;
}
else{
i ;
}
}
}
int main(){
int A[] = {56,23,53,13,64,34};
int n = 6;
displayArray(A,n);
countSort(A,n);
displayArray(A,n);
return 0;
}
CodePudding user response:
This loop
// Initialize the count array elements to zero
for(i=0; i < size 1; i ){
count[i] = 0;
}
does not set all elements of the dynamically allocated array to zeroes.
It seems you mean
// Initialize the count array elements to zero
for(i=0; i < max 1; i ){
count[i] = 0;
}
Or if to include the header <string.h>
then you can write
memset( count, 0, ( max 1 ) * sizeof( int ) );
Or you could initially allocate and initialize the array with zeroes using standard function calloc
instead of malloc
.
Pay attention to that the code will not work if the array contains negative numbers.