分治

排序-归并排序

倖福魔咒の 提交于 2020-11-28 03:40:21
零、数据结构和算法系列目录 数据结构和算法系列目录(不断更新): http://my.oschina.net/liuzeli/blog/128278 一、归并排序简介 归并排序和插入排序一样,其核心是基于比较的,所以也是比较排序中的一种。归并排序运用的分治算法的思想。在介绍归并排序的同时也简单的介绍一下分治算法,这种算法的核心讲解会在后续的博客中介绍。回国头来继续说归并排序。归并排序有着很好的应用场景,它适合给大规模的数据排序,当数据量非常大时,内存排序困难可以对归并排序稍加改动让其支持分批从硬盘读取数据并进行排序,最后把结果进行合并。归并排序(二路归并)的主要思路就是假设两个数组A和数组B分别已经是排序好的,再对这两个数组A和B进行合并成为一个新的排序好的数组。这一步是归并排序的核心步骤,如果对于这个待排序数组来说,开始先对数组两个两个元素进行排序,在对其合并变成4个元素为一组,在变成8个元素为一组,从而到最后完成所有数据的排序。 二、分治算法的简介 分治算法的主要核心是分而治之的思想,即把原文题进行分解,分解成若干的子问题,在对子问题进行求解,在对所有子问题的答案进行合并从而得到原问题的结果。可以表示成下面叙述的过程。 1. 分解:将原问题分解成若干个规模较小且相对独立的的与原问题形式相同的子问题。 2. 求解:若子问题规模较小并且容易解决时将对其进行求解,否则递归的解决子问题

一文道破快速排序从理解到优化

本小妞迷上赌 提交于 2020-02-18 20:12:33
快速排序 快速排序(QuickSort)是对冒泡排序(BubbleSort)的一种改进。 快速排序由C. A. R. Hoare在1960年提出,这是这位图灵奖得主在很年轻的时候想出来的,XMSL。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 其基本的编程实现,我已经在这篇文章中展示过了,各种排序算法都有—— 《基础排序算法大全(Java语言描述)》 。 快排的效率很高,对随机序列是很好使的,但也可能遇到O(N 2 )的糟糕情况。不过只要加以优化这种情况基本不可能出现。 快速排序是数据结构与算法的重要知识,是程序员和计算机专业学生必知必会的重要算法,是面试的常考重点,其性能优化也是需要思考的问题…… 总之,一定要会!很会很会! 快速排序的流程 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: 首先设定一个分界值,通过该分界值将数组分成左右两部分。 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分