-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path103-merge_sort.c
More file actions
85 lines (74 loc) · 1.89 KB
/
103-merge_sort.c
File metadata and controls
85 lines (74 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "sort.h"
#include <stdlib.h>
#include <stddef.h>
/**
* merge - this is an implementation
* of the merge sorting algorithm
* @arr: the array to be sorted
* @tempArray: a tempory array
* @lowerIndex: an int element
* @middleIndex: an int element
* @upperIndex: an int element
*
* Return: a type void element
*/
void merge(int *arr, int *tempArray, int lowerIndex,
int middleIndex, int upperIndex)
{
int lowerStart = lowerIndex;
int lowerStop = middleIndex;
int upperStart = middleIndex + 1;
int upperStop = upperIndex;
int count = lowerIndex;
int i;
while (lowerStart <= lowerStop && upperStart <= upperStop)
{
if (arr[lowerStart] < arr[upperStart])
tempArray[count++] = arr[lowerStart++];
else
tempArray[count++] = arr[upperStart++];
}
while (lowerStart <= lowerStop)
{
tempArray[count++] = arr[lowerStart++];
}
while (upperStart <= upperStop)
{
tempArray[count++] = arr[upperStart++];
}
for (i = lowerIndex; i <= upperIndex; i++)
arr[i] = tempArray[i];
}
/**
* mergeSrt - this is an implementation
* of the merge sorting algorithm
* @arr: the array to be sorted
* @tempArray: a tempory array
* @lowerIndex: an int element
* @upperIndex: an int element
*
* Return: a type void element
*/
void mergeSrt(int *arr, int *tempArray, int lowerIndex, int upperIndex)
{
int middleIndex;
if (lowerIndex >= upperIndex)
return;
middleIndex = (lowerIndex + upperIndex) / 2;
mergeSrt(arr, tempArray, lowerIndex, middleIndex);
mergeSrt(arr, tempArray, middleIndex + 1, upperIndex);
merge(arr, tempArray, lowerIndex, middleIndex, upperIndex);
}
/**
* merge_sort - this is an implementation
* of the merge sorting algorithm
* @arr: the array to be sorted
* @size: size of the array
*
* Return: a type void element
*/
void merge_sort(int *arr, size_t size)
{
int *tempArray = (int *)malloc(size * sizeof(int));
mergeSrt(arr, tempArray, 0, (int)size - 1);
}