#include <iostream> void Swap(int &a,int &b){ int temp; temp = a; a = b; b = temp; } // 维护最小堆 void AdjustMinHeap(int *a,int pos,int len){ int temp,chi ...
分类:
编程语言 时间:
2017-04-24 22:50:15
阅读次数:
212
排序算法有很多种,包括冒泡排序,选择排序,快速排序,插入排序,希尔排序,堆排序等。这里着重讨论下冒泡排序,快速排序和插入排序这三种排序算法。 冒泡排序——时间复杂度O ( n2 ) 冒泡排序从第一个元素开始,依次与后面的元素比较,每次遇到比当前元素更大(或更小)的值时,则交换数值。每一轮比较后位于当 ...
分类:
编程语言 时间:
2017-04-22 17:42:58
阅读次数:
250
堆排序 1.堆排序是一种树形选择排序,在排序过程中,将待排序的记录r[1..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树的双亲结点和孩子结点之间的内在关系,在当前无序的序列中选择关键字最大(或者最小的)记录 1.1、先将无序队列,列成二叉树的的样子 1.2、建初堆。从n/2向上取整处开始调 ...
分类:
编程语言 时间:
2017-04-22 17:34:51
阅读次数:
297
1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列。 对第四个数、第五个数……直到最后一个数,重复第二步。 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i ...
分类:
编程语言 时间:
2017-04-22 00:10:53
阅读次数:
275
1.直接插入排序2.希尔排序3.简单选择排序4.堆排序5.冒泡排序6.快速排序7.归并排序8.基数排序1.直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四..
分类:
编程语言 时间:
2017-04-18 11:52:23
阅读次数:
254
上篇总结中主要实践了算法的内排序的交换排序,那么接下来我们继续实践选择排序的两种:直接选择和堆排序算法。 直接选择排序 package com.sort; /** * 直接选择排序算法 * @author weixing-yang * * 算法思路: * 首先找出最大元素,将其与a[n-1]位置置换 ...
分类:
编程语言 时间:
2017-04-16 12:33:55
阅读次数:
214
堆排序 将所有元素插入一个插入一个查找最小元素的优先队列,重复调用删除最小元素,就可得所有元素按升序排序的结果。 堆排序的两个阶段 堆有序 数据有序 排序结束后所有元素按从左到右从上到下的顺序升序排列。 堆排序的优点 所知唯一能同时最优地利用空间和时间的排序算法,在最坏的情况下也能保证使用~2Nlo ...
分类:
编程语言 时间:
2017-04-13 23:37:14
阅读次数:
222
1. 最大(小)堆 对于一个完全二叉树来说,如果所有的结点(叶子结点除外)的值都大于(小于)其左右孩子结点的值,那么这个完全二叉树就被成为一个大(小)根堆。如下图所示。按照堆的定义可以发现,堆顶结点(二叉树的根结点)一定对应整个序列中的最大(小)记录。这样一来,可以设计一种排序思路,每次将堆的堆顶记 ...
分类:
编程语言 时间:
2017-04-13 23:25:04
阅读次数:
231
输入一个数m表示要排序的数的多少,随机生成m个0~10000之间的数进行堆排序。 ...
分类:
编程语言 时间:
2017-04-12 20:51:05
阅读次数:
174