#include <stdio.h>
void mergeOrder(int* p, int len);
int input(int* array)
{
int n;
int i = 0;
while(1) {
scanf("%d", &n);
if(n == -1) break;
*array = n;
array++;
i++;
}
return i;
}
int main()
{
int array[100];
int len;
len = input(array);
int arr[100];
// bubbleOrder(array);
// quickOrder(array, len);
// selectOrder(array,len);
// insertOrder(array, len);
mergeOrder(array, len);
for(int i =0; array[i] != '\0'; i++) {
printf("number is:%d\r\n", array[i]);
}
return 0;
}
void Merge(int array[], int start, int mid, int end)
{
int temp[100] = {0};
int i;
int j;
int k;
for (i = start, j = mid+1, k = 0; k <= end-start; k++)
{
if (i == mid+1) {
temp[k] = array[j++];
continue;
}
if (j == end+1) {
temp[k] = array[i++];
continue;
}
if (array[i] < array[j]) {
temp[k] = array[i++];
}
else {
temp[k] = array[j++];
}
}
for (i = start, j = 0; i <= end; i++, j++) {
array[i] = temp[j];
}
}
void MSort(int array[], int start, int end)
{
if (start < end)
{
int i;
i = (end + start) / 2;
MSort(array, start, i);
MSort(array, i + 1, end);
Merge(array, start, i, end);
}
}
void mergeOrder(int* p, int len)
{
MSort(p, 0, len-1);
}