上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort)。 快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序。 快速排序也是一种采用分治法解 ...
分类:
编程语言 时间:
2017-05-11 15:15:40
阅读次数:
314
合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序。合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并。 合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的。他还 ...
分类:
编程语言 时间:
2017-05-11 15:14:02
阅读次数:
273
1、之前一直是runtime error,没有找出具体原因,把冒牌排序改成了合并排序,当输入是100000行时,从大约10s变到1s内 2、感觉是atoi指针导致的,当判断atoi的入参不为NULL时才调用,提交结果变成了WA 3、修改了对输入时有QZ情况的处理,当一行中有QZ时,不是直接忽略该行, ...
分类:
其他好文 时间:
2017-04-16 23:00:22
阅读次数:
185
学习最小生成树算法之前我们先来了解下 下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树。 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树。 生成树是连通图的极小连通子图。这里所谓极小是指:若在树中任意 ...
分类:
编程语言 时间:
2017-04-12 02:07:46
阅读次数:
347
合并排序算法: public class MergeSort { public static void MergeSort(int A[],int low,int high){ if(low<high){ int middle=(low+high)/2; MergeSort(A,low,middle ...
分类:
编程语言 时间:
2017-04-08 20:53:09
阅读次数:
227
背景:一个文件内有多条数据记录,每条记录为一行,记录按时间字段升序排序。 需求1:将多个这样的文件合并成一个按时间排序的文件 需求2:将一个按数据记录时间字段排好序的大文件分割成几个小文件 代码: 1 /** 2 * 假定个文件内的数据有序 3 * 4 * @author zsm 5 * @date ...
分类:
编程语言 时间:
2017-03-10 18:05:28
阅读次数:
145
原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 2 4 1 5 9] 先看一下每个步骤下的状态,完了再看合并细节 第一步 [6 2 4 1 5 9]原始状态 第二步 [2 6] [1 4] [5 ...
分类:
编程语言 时间:
2017-03-09 21:48:40
阅读次数:
222
《经典算法大全》是一款IOS平台的应用。里面收录了51种常用算法,都是一些基础问题。博主觊觎了好久,可悲哀的是博主没有苹果,所以从网上下了老奔的整理版并且每个都手敲了一遍。 虽然网上也有博客贴了出来,但是自己写写感觉总是好的。现在分享个大家。 代码和运行结果难免有出错的地方,请大家多多包涵。 1.河 ...
分类:
编程语言 时间:
2017-02-13 10:44:14
阅读次数:
233
1. 什么是归并排序? 更详细的解释可以百度,这里说说其主要思想: 归并排序是采用分治思想,将所有的数均匀的分成n个等分的组,然后依次取(x, x+1) 2个等分组,将他们合并排序,形成一个新的组,然后递归即可,最后会合并为一个组,这个组就是有序的。 示范一下: 要排序的11个数 : [8, 3, ...
分类:
编程语言 时间:
2017-01-21 21:12:04
阅读次数:
284