February 2012
MTWTFSS
«Mar  
 12345
6789101112
13141516171819
20212223242526
272829 

Merge-sort Source-Code

#include
#include
#define NUM_ITEMS 100
void mergeSort(int numbers[],int temp[],int array_size);
void m_sort(int numbers[],int temp[],int left,int right);
void merge(int numbers[],int temp[],int left,int mid,int right);
int numbers[NUM_ITEMS];
int temp[NUM_ITEMS];
int counter;
int main()
{
int i;//seed random number generator
srand(getpid());//fill array with random integers
for (i = 0;i < NUM_ITEMS;i++)
numbers[i] = rand();
mergeSort(numbers,temp,NUM_ITEMS);//perform merge sort on array
for (i = 0;i < NUM_ITEMS;i++)
printf("%i\n",numbers[i]);
printf("Done with sort.\n");
printf("%i %i\n",i,counter);
}

void mergeSort(int numbers[],int temp[],int array_size)
{
m_sort(numbers,temp,0,array_size - 1);
}

void m_sort(int numbers[],int temp[],int left,int right)
{
int mid;
if (right > left)
{
mid = (right + left) / 2;
m_sort(numbers,temp,left,mid);
m_sort(numbers,temp,mid+1,right);
merge(numbers,temp,left,mid+1,right);
}
counter++;
}

void merge(int numbers[],int temp[],int left,int mid,int right)
{
int i,left_end,num_elements,tmp_pos;
left_end = mid –1;
tmp_pos = left;
num_elements = right –left + 1;
while ((left <= left_end) &&(mid <= right))
{
if (numbers[left] <= numbers[mid])
{
temp[tmp_pos] = numbers[left];
tmp_pos = tmp_pos + 1;
left = left +1;
}
else
{
temp[tmp_pos] = numbers[mid];
tmp_pos = tmp_pos + 1;
mid = mid + 1;
}
counter++;
}
while (left <= left_end)
{
temp[tmp_pos] = numbers[left];
left = left + 1;
tmp_pos = tmp_pos + 1;
counter++;
}
while (mid <= right)
{
temp[tmp_pos] = numbers[mid];
mid = mid + 1;
tmp_pos = tmp_pos + 1;
counter++;
}
for (i=0;i <= num_elements;i++)
{
numbers[right] = temp[right];
right = right - 1;
counter++;
}
}

Inlinks:

1 comment to Merge-sort Source-Code

Leave a Reply

  

  

  

You can use these HTML tags

<a href=""title=""><abbr title=""><acronym title=""><b><blockquote cite=""><cite><code><del datetime=""><em><i><q cite=""><strike><strong>