python实现归并排序_归并排序-Python实现

归并排序(MergeSort)

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)(大O符号)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行

递归法(Top-down)

申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

设定两个指针,最初位置分别为两个已经排序序列的起始位置

比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

重复步骤3直到某一指针到达序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

Python实现

def mergeSort(nums):

if len(nums) < 2:

return nums

mid=len(nums)//2

left=mergeSort(nums[:mid])

right=mergeSort(nums[mid:])

return megre(left,right)

def megre(left,right):

result=[]

i=j=0

while j

if left[j] < right[i]:

result.append(left[j])

j+=1

else:

result.append(right[i])

i+=1

if j==len(left):

for temp in right[i:]:

result.append(temp)

else:

for temp in left[j:]:

result.append(temp)

return result

if __name__ == "__main__":

nums = [1, 4, 2, 3.6, -1, 0, 25, -34, 8, 9, 1, 0]

print("original:", nums)

print("Sorted:", mergeSort(nums))

输出内容:

C:\Python27\python.exe D:/code-program/lianxi-test/二叉搜索树.py

('original:', [1, 4, 2, 3.6, -1, 0, 25, -34, 8, 9, 1, 0])

('Sorted:', [-34, -1, 0, 0, 1, 1, 2, 3.6, 4, 8, 9, 25])

Process finished with exit code 0

c语言版本

void merge_sort_recursive(int arr[], int reg[], int start, int end) {

if (start >= end)

return;

int len = end - start, mid = (len >> 1) + start;

int start1 = start, end1 = mid;

int start2 = mid + 1, end2 = end;

merge_sort_recursive(arr, reg, start1, end1);

merge_sort_recursive(arr, reg, start2, end2);

int k = start;

while (start1 <= end1 && start2 <= end2)

reg[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];

while (start1 <= end1)

reg[k++] = arr[start1++];

while (start2 <= end2)

reg[k++] = arr[start2++];

for (k = start; k <= end; k++)

arr[k] = reg[k];

}

void merge_sort(int arr[], const int len) {

int reg[len];

merge_sort_recursive(arr, reg, 0, len - 1);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值