public class MergeSort {
public static void main(String[] args) {
int[] a = {4, 6, 8, 4, 22, 65, 3, 75, 2, 5, 7, 85, 3, 2};
mergeSort(a, 0, a.length - 1);
for (int i : a)
System.out.print(i + " ");
}
public static void merge(int[] a, int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;
int i = 0;
int j = 0;
int[] left = new int[n1 + 1];
int[] right = new int[n2 + 1];
// create new int arrays, namely array left and array right
for (; i < n1; i++)
left[i] = a[p + i];
for (; j < n2; j++)
right[j] = a[q + j + 1];
left[n1] = Integer.MAX_VALUE;
right[n2] = Integer.MAX_VALUE;
i = 0;
j = 0;
for (int k = p; k <= r; k++) {
if (left[i] < right[j]) {
a[k] = left[i];
i++;
} else {
a[k] = right[j];
j++;
}
}
}
public static void mergeSort(int[] a, int p, int r) {
if (p < r) {
int q = (p + r) / 2;
mergeSort(a, p, q);
mergeSort(a, q + 1, r);
merge(a, p, q, r);
}
}
}
#include <stdio.h>
#include <limits.h>
void merge(int a[], int p, int q, int r);
void mergeSort(int a[], int p, int r);
int main(void) {
int a[] = {54, 7465, 243, 3, 22, 6, 7, 8, 65, 234, 1, 8, 65, 4, 345};
int length = sizeof(a) / sizeof(*a);
mergeSort(a, 0, length);
for (int i = 0; i < length; i++)
printf("%d ", a[i]);
return 0;
}
void merge(int a[], int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;
int i = 0;
int j = 0;
int left[n1 + 1];
int right[n2 + 1];
// create new int arrays, namely array left and array right
for (; i < n1; i++)
left[i] = a[p + i];
for (; j < n2; j++)
right[j] = a[q + j + 1];
left[n1] = INT_MAX;
right[n2] = INT_MAX;
i = 0;
j = 0;
for (int k = p; k <= r; k++) {
if (left[i] < right[j]) {
a[k] = left[i];
i++;
} else {
a[k] = right[j];
j++;
}
}
}
void mergeSort(int a[], int p, int r) {
if (p < r) {
int q = (p + r) / 2;
mergeSort(a, p, q);
mergeSort(a, q + 1, r);
merge(a, p, q, r);
}
}
#include <iostream>
#include <limits.h>
using namespace std;
void merge(int a[], int p, int q, int r);
void mergeSort(int a[], int p, int r);
int main() {
int a[] = {4, 6, 8, 4, 22, 65, 3, 75, 2, 5, 7, 85, 3, 2};
mergeSort(a, 0, sizeof(a) / sizeof(*a) - 1);
for (int i : a)
cout << i << " ";
return 0;
}
void merge(int a[], int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;
int i = 0;
int j = 0;
int left[n1 + 1];
int right[n2 + 1];
// create new int arrays, namely array left and array right
for (; i < n1; i++)
left[i] = a[p + i];
for (; j < n2; j++)
right[j] = a[q + j + 1];
left[n1] = INT_MAX;
right[n2] = INT_MAX;
i = 0;
j = 0;
for (int k = p; k <= r; k++) {
if (left[i] < right[j]) {
a[k] = left[i];
i++;
} else {
a[k] = right[j];
j++;
}
}
}
void mergeSort(int a[], int p, int r) {
if (p < r) {
int q = (p + r) / 2;
mergeSort(a, p, q);
mergeSort(a, q + 1, r);
merge(a, p, q, r);
}
}
def mergeSort(alist):
print("Splitting ", alist)
if len(alist) > 1:
mid = len(alist) // 2
lefthalf = alist[:mid]
righthalf = alist[mid:]
mergeSort(lefthalf)
mergeSort(righthalf)
i = 0
j = 0
k = 0
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
alist[k] = lefthalf[i]
i = i + 1
else:
alist[k] = righthalf[j]
j = j + 1
k = k + 1
while i < len(lefthalf):
alist[k] = lefthalf[i]
i = i + 1
k = k + 1
while j < len(righthalf):
alist[k] = righthalf[j]
j = j + 1
k = k + 1
print("Merging ", alist)
array = [54, 26, 93, 17, 77, 31, 44, 55, 20]
mergeSort(array)
print(array)