下面我介绍两种选择排序的方法:一.选最小的或最大的(我以最小的为列)这种方法的思路为:1.在数组中选出最小的数值,放在a[0]位置。2.选出次小的放在a[1]位置。3.就这样一直选,直到排好数列。实现代码:#include<assert.h>
voidSelectSort(int*arr,intsize)
{
assert(..
分类:
编程语言 时间:
2016-05-20 06:21:38
阅读次数:
165
下面我介绍两种选择排序的方法:一.选最小的或最大的(我以最小的为列)这种方法的思路为:1.在数组中选出最小的数值,放在a[0]位置。2.选出次小的放在a[1]位置。3.就这样一直选,直到排好数列。实现代码:
分类:
编程语言 时间:
2016-05-20 06:20:13
阅读次数:
164
在前面几章中,分别介绍过冒泡排序,插入排序,选择排序以及归并排序。而在介绍散列技术时,也曾介绍过桶排序、计数排序以及奇数排序。在讨论优先级队列时,也结合堆这种结构介绍过堆排序以及更为通用的锦标赛排序。这一章将学习若干种更高级的排序算法并讨论与之相关的几个衍生问题。...
分类:
编程语言 时间:
2016-05-20 06:18:48
阅读次数:
336
插入排序:
算法简介:接插入排序(InsertionSort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。时间复杂度为O(n^2)。最稳定的排序算法但是效率很低
代码实现:
voidInsertSort(int*arr,intn)
{
..
分类:
编程语言 时间:
2016-05-18 22:14:03
阅读次数:
200
JAVA当中有以下几种常见排序算法:插入排序(直接插入排序、链表插入排序、分段/二分/折半插入排序、希尔排序/缩小增量排序)、冒泡排序、快速排序、简单选择排序、归并排序、二叉树排序、基数排序等。
(1)复杂度比较
表1 几种常见排序算法的复杂度
算法名称
平均情况
最好情况
最坏情况
辅助空间
直接...
分类:
编程语言 时间:
2016-05-18 19:48:41
阅读次数:
240
堆排序1. 堆:
1. 一种完全二叉树。
2. 每个结点的值都大于或等于其左右子结点的值,大顶堆。
3. 小顶堆同理。
2. 是简单选择排序的一种改进:把每次比较的结果用堆来保存起来。
3. 堆排序(大顶堆):
1. 将待排序列构造成一个大顶堆。
2. 将堆顶和待排序列最后一个元素交换,也就是保存起来。
3. 将剩余的序列(去除最后一个元素)重新构造成...
分类:
编程语言 时间:
2016-05-18 19:41:07
阅读次数:
175
这篇博客主要实现一些常见的排序算法。例如:
//冒泡排序
//选择排序
//简单插入排序
//折半插入排序
//希尔排序
//归并排序
//双向的快速排序
//单向的快速排序
//堆排序对于各个算法的实现原理,这里不再多说了,代码中注释较多,结合注释应该都能理解算法的原理,读者也可自己google一下。另外,注释中有很多点,比如边界条件、应用场景等已经用 * 标记,* 越多,越应...
分类:
编程语言 时间:
2016-05-18 18:37:48
阅读次数:
257
怎么记忆稳定性: 总过四大类排序:插入、选择、交换、归并(基数排序暂且不算) 比较高级一点的(时间复杂度低一点得)shell排序,堆排序,快速排序(除了归并排序)都是不稳定的,在加上低一级的选择排序是不稳定的。 比较低级一点的(时间复杂度高一点的)插入排序, 冒泡排序,归并排序,基数排序都是稳定的。 ...
分类:
编程语言 时间:
2016-05-18 17:47:06
阅读次数:
725
直接插入排序:在序列中,假设升序排序1)从0处开始。1)若走到begin=3处,将begin处元素保存给tmp,比较tmp处的元素与begin--处元素大小关系,若begin处<begin-1处,将begin-1处元素移动到begin;若大于,则不变化。再用tmp去和begin--处的元素用同样的方法去作比较,直至b..
分类:
编程语言 时间:
2016-05-18 06:59:33
阅读次数:
222