●直接插入排序(InsertSort)1、算法描述:该算法是一种简单直观的是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上只需用到O(1)的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位为最新..
分类:
编程语言 时间:
2016-05-22 18:41:12
阅读次数:
249
数据结构中的排序算法分为比较排序,非比较排序。比较排序有插入排序、选择排序、交换排序、归并排序,非比较排序有计数排序、基数排序。下面是排序的具体分类:1.直接排序主要思想:使用两个指针,让一个指针从开始,另一个指针指向前一个指针的+1位置,两个数据进行比较voidI..
分类:
编程语言 时间:
2016-05-22 18:39:26
阅读次数:
282
●快速排序(QuickSort)1、算法描述:在平均状况下,排序n个数据要O(nlg(n))次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlg(n))算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来,且在..
分类:
编程语言 时间:
2016-05-22 18:34:12
阅读次数:
232
一。 归并排序 O(nlogn)的时间复杂度的排序方法中,稳定的只有归并排序,堆排序和快速排序都是不稳定的。 在数组长度比较短的情况下,不进行递归,而是选择其他的排序方案,比如插入排序。 二。 外排序(External sorting) 外排序是指处理超过内存限制的数据的排序算法。通常是讲中间结果放 ...
分类:
编程语言 时间:
2016-05-21 21:34:59
阅读次数:
190
快速排序的挖坑法与prev、cur法,我们在上一篇博客的第6个排序中讲的非常详细,http://10740184.blog.51cto.com/10730184/1774508【数据结构】常用排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
有兴趣的话,相信聪明的你,一看就会秒懂快速排..
分类:
编程语言 时间:
2016-05-20 14:40:09
阅读次数:
275
在前面几章中,分别介绍过冒泡排序,插入排序,选择排序以及归并排序。而在介绍散列技术时,也曾介绍过桶排序、计数排序以及奇数排序。在讨论优先级队列时,也结合堆这种结构介绍过堆排序以及更为通用的锦标赛排序。这一章将学习若干种更高级的排序算法并讨论与之相关的几个衍生问题。...
分类:
编程语言 时间:
2016-05-20 06:18:48
阅读次数:
336
插入排序:
算法简介:接插入排序(InsertionSort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。时间复杂度为O(n^2)。最稳定的排序算法但是效率很低
代码实现:
voidInsertSort(int*arr,intn)
{
..
分类:
编程语言 时间:
2016-05-18 22:14:03
阅读次数:
200
堆排序1. 堆:
1. 一种完全二叉树。
2. 每个结点的值都大于或等于其左右子结点的值,大顶堆。
3. 小顶堆同理。
2. 是简单选择排序的一种改进:把每次比较的结果用堆来保存起来。
3. 堆排序(大顶堆):
1. 将待排序列构造成一个大顶堆。
2. 将堆顶和待排序列最后一个元素交换,也就是保存起来。
3. 将剩余的序列(去除最后一个元素)重新构造成...
分类:
编程语言 时间:
2016-05-18 19:41:07
阅读次数:
175
这篇博客主要实现一些常见的排序算法。例如:
//冒泡排序
//选择排序
//简单插入排序
//折半插入排序
//希尔排序
//归并排序
//双向的快速排序
//单向的快速排序
//堆排序对于各个算法的实现原理,这里不再多说了,代码中注释较多,结合注释应该都能理解算法的原理,读者也可自己google一下。另外,注释中有很多点,比如边界条件、应用场景等已经用 * 标记,* 越多,越应...
分类:
编程语言 时间:
2016-05-18 18:37:48
阅读次数:
257