插入算法很多,无论是在内功修炼,各种笔试面试都是相当有用的。接下来,将陆续将各种排序算法进行练习:
主要分为以下几个部分(其他后面学习补充):
一、插入类排序:1、直接插入排序;2、折半插入排序;3、希尔shell排序;
二、交换类排序:1、冒泡排序 ;2、快速排序;
三、选择类排序:1、简单选择; 2、堆排序;
本人多使用Java——开始吧!
首先推荐维基百科《排序算法》词条...
分类:
编程语言 时间:
2015-03-20 12:55:22
阅读次数:
187
四、归并排序1.自底向上基本思想:第1趟归并排序时,将待排序的文件R[1..n]看作是n个长度为1的有序子文件,将这些子文件两两归并,若n为偶数,则得到 个长度为2的有序子文件;若n为奇数,则最后一个子文件轮空(不参与归并)。故本趟归并完成后,前lgn个有序子文件长度为2,但最后一个子文件长度仍为1...
分类:
编程语言 时间:
2015-03-14 15:08:43
阅读次数:
170
排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行时间中占有很大比重;并且排序本身对推动算法分析的发展也起很大作用。一、排序的基本概念1.排序或分类所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下:1)被排序对象--文...
分类:
编程语言 时间:
2015-03-13 18:00:22
阅读次数:
240
桶排序是一种稳定的排序方法,也是一种外排序。
桶排序的时间复杂度:最坏情况运行时间:当分布不均匀时,全部元素都分到一个桶中,则O(n^2),当然[算法导论8.4-2]也可以将插入排序换成堆排序、快速排序等,这样最坏情况就是O(nlgn)。最好情况运行时间:O(n)。
也就说,前面介绍的排序算法要么是O(n^2),要么是O(nlogn),只有桶排序是可能实现O(n)排序的...
分类:
编程语言 时间:
2015-02-25 18:44:00
阅读次数:
184
基排序是外排序,稳定的排序算法。
它的时间复杂度:O(d(r+n)),d为每个数的长度,r表示基数,n表示数组中元素的个数。
基数排序是另外一种比较有特色的排序方式,它是怎么排序的呢?我们可以按照下面的一组数字做出说明:12、 104、 13、 7、 9
(1)按个位数排序是12、13、104、7、9
(2)再根据十位排序104、7、9、12、13
(3)再根据百...
分类:
编程语言 时间:
2015-02-25 18:42:17
阅读次数:
169
之前已经比较熟悉快排的基本思想了,其实现的方式也有很多种。下面我们罗列一些常见的实现方式:
版本一:算法导论上的单向扫描,选取最后一个元素作为主元
#include
using namespace std;
int partition(int data[], int low, int high)
{
int pivot = data[high]; // let the ...
分类:
编程语言 时间:
2015-02-24 18:46:40
阅读次数:
185
基本思想:基于分治法,即把待排序的数组序列,分为若干个子序列,对每个子序列排序,然后再把所有有序的子序列合并为一个整体有序的序列。分析可知,如果拿任何一个元素作为子序列,那么所有子序列就已经是有序的,而归并排序的关键就在于如何合并,也就是“归并”。
归并排序是外排序,稳定排序,时间复杂度是O(nlogn).
详细说归并排序的过程:1个...
分类:
编程语言 时间:
2015-02-23 17:55:50
阅读次数:
272
选择排序的核心是:每趟选择最小的元素和首部交换。
时间复杂度:O(n^2)。
选择排序是一种不稳定的排序,为什么呢?因为不好处理相等两个数的前后位置,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。所以稳定排序是一定不会改变相等数之间之前位置关系的。
...
分类:
编程语言 时间:
2015-02-21 17:46:47
阅读次数:
167
从这一篇开始,计划复习一下数据结构的基本知识。一来是为了开年之后的找工作,二来是为了想提升自己的编程能力。由于这些数据结构知识点,之前都学习过,这里我们就提炼出每个知识点的核心,以及代码实现。
这篇先说排序算法中的插入排序。
插入排序是一种稳定排序算法,属于内排序、适合少量数据量的排序。
当输入数组已经排好序时,插入排序需要O(n),快排需要O(n^2)。
当输入数...
分类:
编程语言 时间:
2015-02-21 09:47:40
阅读次数:
205
从这一篇开始,我开始复习数据结构的知识点,博文主要偏重于每个知识点的核心思想,以及代码实现。这一篇先从排序算法中的插入排序开始。
稳定排序、内排序、适合少量数据量的排序。
当输入数组已经排好序时,插入排序需要O(n),快排需要O(n^2)。
当输入数组倒序排列时,插入排序时复为:O(n^2)。
平均时间复杂度:O(n^2)。
插入排序的基本做法是:将一个数插入到一个已...
分类:
编程语言 时间:
2015-02-21 09:44:32
阅读次数:
227