Python实现合并排序MergeSort

def merge(sort_list, start, mid, end):

left_list = sort_list[start:mid]

right_list = sort_list[mid:end]

left_list.append(float("inf"))

right_list.append(float("inf"))

left_index = right_index = 0

i = start

while i < end:

if left_list[left_index] < right_list[right_index]:

sort_list[i] = left_list[left_index]

left_index += 1

else:

sort_list[i] = right_list[right_index]

right_index += 1

i += 1

时间: 2024-10-10 15:11:20

Python实现合并排序MergeSort的相关文章

算法之合并排序(mergeSort)

合并排序算法在结构上是递归的,采用分治策略:就是将原有的问题划分为 n 个规模较小但结构与原问题相似的子问题,递归地解决这些子问题,然后合并其结果,就得到原问题的解. 合并排序的模式一般如下: 1.分解:将 n 个元素分解为各含 n/2 个元素的两个序列: 2.解决:用分治排序法对两个子序列递归地排序: 3.合并:合并两个已排好序的子序列得到排序结果. 在对子序列递归的过程中,当子序列元素数为1时,递归结束. 合并排序算法的时间复杂度为O(nlgn) 1 void merge(int* a, i

【合并排序法】

/* 合并排序法 */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX1 10 #define MAX2 10 #define SWAP(x,y) {int t; t = x; x = y; y = t;} int partition(int[], int, int); void quicksort(int[], int, int); void mergesort(int[], i

ACM ICPC 2011–2012, NEERC, Northern Subregional Contest J. John’s Inversions(合并排序求逆序数对数)

题目链接:http://codeforces.com/gym/100609/attachments 题目大意:有n张牌,每张牌有红色和蓝色两面,两面分别写了一些数字,同种颜色的任意两个数字若排在前面的数字比排在后面的数字大就叫做一对逆序数.求怎样排序得到的逆序数对最少. 解题思路:其中一种颜色的数字是顺序且这种颜色数字相同时对应的另一种颜色的数字是顺序时得到的逆序数对数最少.难点在于求逆序数对数.因为数量很大O(n^2)复杂度不能满足,这里根据合并排序的原理求解每个数字前面有多少个比它大的数字,

算法实验:分治法合并排序(C++)

这篇文章分两部分来写,第一部分写代码的实现过程,第二部分把实验报告从头到尾呈现出来. 我习惯调试使用的编译器是DEV C++,不是vs系列的,可能头文件上有点区别.但是下面的报告是我放到vs里面测试过的,可以直接用,不影响. 第一部分:(解析) 题目:随机产生一个整型数组,然后用合并排序将该数组做升序排列,要求输出排序前和排序后的数组. 题目分析: 需要随机产生一个整数数组: 采用的算法是合并排序,也就是用归并排序: 输出排序后的数组. 随机产生一个整数数组:这个问题首先想到的是用rand()函

改进版的合并排序

下面是改进版的合并排序,下面是jdk1.7的源码部分 执行步骤如下: (1)如果比较的长度小于INSERTIONSORT_THRESHOLD插入排序的阈值,直接调用传统的插入排序进行比较 (2)当大于插入排序的阈值时,采用合并排序算法,这里有个改进的地方,红色加亮部分,如果已经排好序的,不再进行比较,而是直接复制过去,提高效率 private static void mergeSort(Object[] src,                                  Object[]

合并排序

描述 给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中两路合并排序算法进行排序,并输出排序最后结果的相应序列. 输入 共两行,第一行给出排序元素数目n,第二行给出n个元素,1≤n≤100000,每个元素值范围为 [0,100000] 输出 一行,输出排序结果. 样例输入 748 36 68 72 12 48 2 样例输出 2 12 36 48 48 68 72 #include<stdio.h> #include<malloc.h> #define MaxSize

【算法设计与分析基础】13、合并排序

package cn.xf.algorithm.ch04; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Test; public class MergeSort { public void mSort(List<Integer> data) { if(data.size() <= 1) { return; } //拷贝两边的数据 List copy

Algorithm Road~合并排序

1 #include <iostream> 2 using namespace std; 3 /** 4 分治法: 5 合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的. 6 他还是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化. 7 他的唯一缺点是,需要利用额外的N的空间来进行排序. 8 9 实验步骤:: 10 申请空间,使其大小为两个已经排序序列之和,然后将待排序数组复制到该数组中. 11 设定两个指针,最初位置分别

第二章 算法入门 合并排序

在第二章中难的算法不多,接下来我会把稍微复杂一点的算法整理一下 #include <iostream> using namespace std; void mergeSort(int *A,int left,int mid,int right) { int *L=new int[mid-left+1]; int *R=new int[right-mid+1]; int i,j; for(i=0;i<mid-left+1;i++) { L[i]=A[left+i]; } for (j=0;