Python:
- 方法一:
# 归并排序 def merge(left, right): c = [] j = h = 0 while j < len(left) and h < len(right): if left[j] < right[h]: c.append(left[j]) j += 1 else: c.append(right[h]) h += 1 if j == len(left): for i in right[h:]: c.append(i) else: for i in left[j:]: c.append(i) return c def merge_sort(lists): if len(lists) <= 1: return lists middle = len(lists) / 2 left = merge_sort(lists[:middle]) right = merge_sort(lists[middle:]) return merge(left, right)
- 方法二:
#归并排序 def merge(L, start, mid, end): i = start j = mid + 1 tmp = [] while (i <= mid) and (j <= end): if L[i] < L[j]: tmp.append(L[i]) i += 1 else: tmp.append(L[j]) j += 1 while i <= mid: tmp.append(L[i]) i += 1 while j <= end: tmp.append(L[j]) j += 1 for x in range(len(tmp)): L[x + start] = tmp[x] def merge_sort(L, start, end): mid = int((start + end) / 2) if start < end: merge_sort(L, start, mid) merge_sort(L, mid + 1, end) merge(L, start, mid, end) return L
Java:
//归并排序{33, 2, 46, 84, 5};
private static int[] mergeSort(int[] L, int low, int high) {
int mid = (low + high) / 2;
if (low < high) {
mergeSort(L, low, mid);
mergeSort(L, mid + 1, high);
merge(L, low, mid, high);
}
return L;
}
private static void merge(int[] L, int low, int mid, int high) {
int[] temp = new int[high - low + 1];
int i = low;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= high) {
if (L[i] < L[j]) {
temp[k++] = L[i++];
} else {
temp[k++] = L[j++];
}
}
while (i <= mid) temp[k++] = L[i++];
while (j <= high) temp[k++] = L[j++];
for (int x = 0; x < temp.length; x++) L[x + low] = temp[x];
}