排序算法四:交换排序之冒泡排序声明:引用请注明出处http://blog.csdn.net/lg1259156776/引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的前三篇讲述了插入排序的三种不同类型,本文讲述第二大类的排序算法:交换排序,包括冒泡排序和快速排序。...
分类:
编程语言 时间:
2015-09-25 13:21:37
阅读次数:
272
1. 比较排序算法的下界 (1) 比较排序 到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界;快速排序在平均情况下达到该上界。 如果仔细观察,我们会发现:在排序的最终结果中,各元素之间的次序依赖于它们之间的比较。我们把这类排序算法统称为比...
分类:
编程语言 时间:
2015-09-23 19:25:12
阅读次数:
233
各种排序算法的比较排序方法平均时间最坏情况辅助存储简单排序O(n2)O(n2)O(1)快速排序O(nlogn)O(n2)O(logn)堆排序O(nlogn)O(nlogn)O(1)归并排序O(nlogn)O(nlogn)O(n)基数排序O(d(n+rd))O(d(n+rd))O(rd)快速排序 排....
分类:
编程语言 时间:
2015-09-22 18:37:15
阅读次数:
286
package leetcode.sort;import java.util.Arrays;import java.util.Random;/** * HeapSort * Created by blank on 15/8/12. */public class HeapSort { publi...
分类:
编程语言 时间:
2015-09-22 13:01:51
阅读次数:
174
一、 单选题1. 下面排序算法中,初始数据集的排列顺序对算法的性能无影响的是A. 堆排序B. 插入排序C. 冒泡排序D. 快速排序2. 一个栈的入栈序列式ABCDE则不可能的出栈序列是A. DECBAB. DCEBAC. ECDBAD. ABCDE3. 某进程在运行过程中需要等待从磁盘上读入数...
分类:
其他好文 时间:
2015-09-21 12:21:22
阅读次数:
430
现在来看,堆的含义大概有两种,一种是数据结构,一种是在一些语言中所定义的“垃圾回收机制”,如Java,在书本上的开篇强调了这两者,并强调若非特殊说明,皆把堆看做是一种数据结构。(二叉)堆的定义:1)它是一个数组,可以被看成是一棵近似的完全二叉树,树上的每一个节点看做是数组中的每一个元素。2)堆分为最...
分类:
编程语言 时间:
2015-09-20 16:18:56
阅读次数:
240
堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki = k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整; 若将和此序列对应的...
分类:
编程语言 时间:
2015-09-19 09:40:41
阅读次数:
175
排序算法 平均复杂度 冒泡排序 O(n2) 选择排序 O(n2) 插入排序 O(n2) 希尔排序 O(n1.5) 快速排序 O(N*logN) 归并排序 O(N*logN) 堆排序 O(N*logN) 基数排序 O(d(n+r)) 一. 冒泡排序(BubbleSort) 基本思想:两个数...
分类:
编程语言 时间:
2015-09-17 23:29:50
阅读次数:
834
1. 预备知识 (1) 基本概念 如图,(二叉)堆一个数组,它可以被看成一个近似的完全二叉树。树中的每一个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且从左向右填充。堆的数组A包括两个属性:A.length给出了数组的长度;A.heap-size表示有多少个堆元素保存在该数组中(因为...
分类:
编程语言 时间:
2015-09-17 21:22:24
阅读次数:
351
选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 选择排序正如定义所讲,在数组查询出最小值,然后放在此次循环开始位置(前一次循环已经获取比它更小的值放在前面)。 简单选择排序就是单纯的从数组中一次一次循环获取到最小值,放到循环位置。而堆排序正如...
分类:
编程语言 时间:
2015-09-17 17:11:28
阅读次数:
267