I am currently found out a interesting and simple sorting algorithm, so I implemented it in with dynamically allocated array. Here is my code.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void positiveIntSort(int *array,int size);
void printArray(int array[],int size);
int main() {
int bigNum = 99999;
int *array = (int *) malloc (bigNum*sizeof(int));
int i,index,size;
printf("Enter the size of array: ");
scanf("%d",&size);
printf("Enter each element for array: ");
for(i = 0; i < size; i++) {
scanf("%d",&index);
array[index] = 1;
}
positiveIntSort(array,size);
printArray(array,size);
}
int positiveIntSort(int *array,int size) {
int i,j = 0;
int sortedArray[size];
for(i = 0; i < 99999,j < size; i++) {
if(array[i] == 1)
sortedArray[j++] = i;
}
memcpy(array,sortedArray,size);
printArray(sortedArray,size);
}
void printArray(int array[],int size) {
int i;
for(i = 0; i < size; i++) {
printf("%d\t",array[i]);
}
printf("\n");
}
So, basically what I am doing is if user input a number : a, I go to corresponding index, which is a
in this case, and assign 1
to this array[a]
.
So I traverse again and print all the index with value 1
. This way gives me a sorted array.
However, I have some trouble with the dynamically allocated array. Here is a sample output I have:
Enter the size of array: 5
Enter each element for array:23 12 45 63 38
12 23 38 45 63
12 1845015 0 0 0
So sorting is definitely working. However when I return the sorted array to the dynamically allocated array, the result messed up. I could not find the reason? Is the way I use memcpy incorrect?
Besides, is the complexity of this algorithm O(n). Is there anyway to make this algorithm better?