Code:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 10
void mergeSort(int set[] , int length);
void sortSubArray(int set[] , int low , int high);
void merge(int set[] , int left , int middle1 , int middle2 , int right);
void displayElements(int set[] , const int length);
void displaySubArray(int set[] , int left , int right);
int main()
{
int set[SIZE];
int i;
srand(time(NULL));
for(i = 0; i < SIZE; i++)
{
set[i] = 10 + rand() % 99;
}
printf("Unsorted array: \n");
displayElements(set , SIZE);
printf("\n\n");
mergeSort(set , SIZE);
printf("Sorted array:\n");
displayElements(set , SIZE);
system("PAUSE");
return 0;
}
void mergeSort(int set[] , int length)
{
sortSubArray(set , 0 , length - 1);
}
void sortSubArray(int set[] , int low , int high)
{
int middle1 , middle2;
if((high - low) >= 1)
{
middle1 = (low + high) / 2;
middle2 = middle1 + 1;
printf("split: ");
displaySubArray(set , low , high);
printf("\n ");
displaySubArray(set , middle2 , high);
printf("\n\n");
sortSubArray(set , low , middle1);
sortSubArray(set , middle2 , high);
merge(set , low , middle1 , middle2 , high);
}
}
void merge(int set[] , int left , int middle1 , int middle2 , int right)
{
int leftIndex = left;
int rightIndex = middle2;
int combinedIndex = left;
int tempArray[SIZE];
int i;
printf("merge: ");
displaySubArray(set , left , middle1);
printf("\n ");
displaySubArray(set , middle2 , right);
printf("\n");
while(leftIndex <= middle1 && rightIndex <= right)
{
if(set[leftIndex] <= set[rightIndex])
{
tempArray[combinedIndex++] = set[leftIndex++];
}
else
{
tempArray[combinedIndex++] = set[rightIndex++];
}
}
if(leftIndex == middle2)
{
while(rightIndex <= right)
{
tempArray[combinedIndex++] = set[rightIndex++];
}
}
else
{
while(leftIndex <= middle1)
{
tempArray[combinedIndex++] = set[leftIndex++];
}
}
for(i = left; i <= right; i++)
{
set[i] = tempArray[i];
}
printf(" ");
displaySubArray(set , left , right);
printf("\n\n");
}
void displayElement(int set[] , const int length)
{
displaySubArray(set , 0 , length - 1);
}
void displaySubArray(int set[] , int left , int right)
{
int i;
for(i = 0; i < left; i++)
{
printf(" ");
for(i = left; i <= right; i++)
{
printf("%d" , set[i]);
}
}
}
Sorry if that's too long or complicated but the problem is actuall with the displayElement procedure. (I reference it twice in main). I keep receiving a linker error wich relates to that function and I can't understand why. If anyone has the time could they help me out please. I'm in no rush , so no need to put yourself through any trouble.