二路归并排序实现
用python实现
def Merge(A,low,mid,high):
i=low
j=mid+1
T=[]
while i<=mid and j<=high:
if A[i]<A[j]:
T.append(A[i])
i=i+1
else:
T.append(A[j])
j=j+1
while i<=mid:
T.append(A[i])
i=i+1
while j<=high:
T.append(A[j])
j=j+1
A[low:high+1]=T[:]
def MergeSort(A,low,high):
if low<high:
mid=int((low+high)/2)
MergeSort(A,low,mid)
MergeSort(A,mid+1,high)
Merge(A,low,mid,high)
def main():
A=[2,3,1,4,3,3,7,8,4,6,3,1,5,2,4,7,8,0,9,4,6,7]
MergeSort(A,0,len(A)-1)
print('MergeSort:',A)
if __name__=='__main__':
main()
用C++实现
#pragma once
#include<iostream>
#include<vector>
using namespace std;
void Merge(int A[], int low, int mid, int high) {
int i = low;
int j = mid + 1;
vector<int> T;
while (i <= mid && j <= high) {
if (A[i] > A[j]) {
T.push_back(A[j++]);
}
else {
T.push_back(A[i++]);
}
}
while (i <= mid) {
T.push_back(A[i++]);
}
while (j <= high) {
T.push_back(A[j++]);
}
int k = low;
for (auto e : T) {
A[k++] = e;
}
}
void MergeSort(int A[], int low, int high) {
if (low < high) {
int mid = (low + high) / 2;
MergeSort(A, low, mid);
MergeSort(A, mid + 1, high);
Merge(A, low, mid, high);
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-37877.html