归并排序是建立在归并操作上的一种有效的排序算法。该算法是採用分治法(Divide and
Conquer)的一个很典型的应用。首先考虑下怎样将将二个有序数列合并。这个很easy,仅仅要从比較二个数列的第一个数,谁小就先取谁,取了后就在相应数列中删除这个数。然后再进行比較,假设有数列为空,那直接将还有...
分类:
其他好文 时间:
2014-06-11 21:52:36
阅读次数:
289
// 归并排序
void Merge1(int arr[], int p, int mid, int r)
{
int n1 = mid - p + 1;
int n2 = r - mid;
int *pLeft = new int[n1]();
int *pRight = new int[n2]();
for (int i = 0; i < n1; ++i)
{...
分类:
其他好文 时间:
2014-06-08 18:08:59
阅读次数:
190
很多时候排序是为了对数据进行归类,比如对城市进行排序,对员工的职业进行排序。这种排序的特点就是重复的值特别多。
如果使用普通的快排对这些数据进行排序,会造成N^2复杂度,但是归并排序和三路快排就没有这样的问题。
三路快排
三路快排的基本思想就是,在对数据进行分区的时候分成左中右三个部分,中间都是相同的值,左侧小于中间,右侧大于中间。
...
分类:
其他好文 时间:
2014-06-08 15:29:45
阅读次数:
197
合并排序算法是用分治策略实现对N个元素进行排序的算法。其基本思想是:将待排序元素分成大小大致相同 的两个子集合,分别
对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。重点:1.分治的实现2.合并的实现分治,就是把整个集合的元素一直除2化分,一直化为到没有两个元素开始合并。图:分...
分类:
其他好文 时间:
2014-06-08 02:06:21
阅读次数:
289
排序算法是我们工作中使用最普遍的算法,常见的语言库中基本都会有排序算法的实现,比如c标准库的qsort,stl的sort函数等。本文首先介绍直接插入排序,归并排序,堆排序,快速排序和基数排序等比较排序算法,然后介绍计数排序,基数排序等具有线性时间的排序算法。本文主要讨论算法的实现方法,并不会过多介绍...
分类:
其他好文 时间:
2014-06-07 21:23:31
阅读次数:
348
常用排序算法有以下几种:冒泡排序、插入排序、快速排序、归并排序、堆排序。本文将对五种常用算法分析并实现。//交换两个元素的值 这里列出几种不同写法void
swap(int *a, int *b){ int c = *a; *a = *b; *b = c;}void swap(in...
分类:
其他好文 时间:
2014-06-07 20:30:48
阅读次数:
315
原文:浅谈算法和数据结构: 四
快速排序上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick
Sort)。快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交...
分类:
其他好文 时间:
2014-06-07 20:15:43
阅读次数:
362
import static org.junit.Assert.*;import
java.util.Arrays;import org.junit.Test;public class SortAlgorithms { /** *
归并排序算法 * * @param a * @return */ st...
分类:
其他好文 时间:
2014-06-06 07:26:53
阅读次数:
273
package chap02;import static
org.junit.Assert.*;import java.util.Arrays;import java.util.Random;import
org.junit.Test;/*** * 在归并排序中对小数组采用插入排序 * * @aut...
分类:
其他好文 时间:
2014-06-05 16:51:05
阅读次数:
197
分治算法
一、基本概念
在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……
任何一个可以用计算机求解的...
分类:
其他好文 时间:
2014-06-04 14:10:55
阅读次数:
344