#include <stdio.h>
#include "windows.h"
#define MaxVertex 6
#define INF 210000000
#define N 7
void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void merge(int arr[], int tmp[], int left, int leftEnd, int right, int rightEnd) {
int size = rightEnd - left +1,i = left;
while (left <= leftEnd && right<= rightEnd){
if (arr[left] <= arr[right])
tmp[i++] = arr[left++];
else
tmp[i++] = arr[right++];
}
while (left <= leftEnd)
tmp[i++] = arr[left++];
while (right <= rightEnd)
tmp[i++] = arr[right++];
for (int j = 0; j < size; ++j,rightEnd--)
arr[rightEnd] = tmp[rightEnd];
}
void mergeSort(int arr[], int tmp[], int start, int end) {
if (start >= end) return;
int mid = (start + end) / 2;
mergeSort(arr, tmp,start,mid);
mergeSort(arr, tmp,mid+1,end);
merge(arr,tmp,start,mid,mid+1,end);
}
void merge1(int arr[], int tmp[], int left, int leftEnd, int right, int rightEnd){
int i = left, size = rightEnd - left + 1;
while (left <= leftEnd && right <= rightEnd) {
if(arr[left] <= arr[right])
tmp[i++] = arr[left++];
else
tmp[i++] = arr[right++];
}
while (left <= leftEnd)
tmp[i++] = arr[left++];
while (right <= rightEnd)
tmp[i++] = arr[right++];
for (int j = 0; j < size; ++j, rightEnd--)
arr[rightEnd] = tmp[rightEnd];
}
void mergeSort1(int arr[], int tmp[], int start, int end){
if(start >= end) return;
int mid = (start + end) / 2;
mergeSort(arr, tmp, start, mid);
mergeSort(arr, tmp, mid + 1, end);
merge(arr, tmp, start, mid, mid + 1, end);
}
int main() {
int matrix[] = {3,5,7,2,9,0,6,1,8,4};
int tmp[10];
mergeSort(matrix,tmp,0,9);
for (int i = 0; i < 10; ++i) {
printf("%d ", matrix[i]);
}
}