排序
BIG_GENERAL_DD
好好学习,天天向上.
展开
-
ADV-103-算法提高-逆序排列
算法提高 逆序排列问题描述 编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中。当用户输入0时,表示输入结束。然后程序将把这个数组中的值按逆序重新存放,并打印出来。例如:假设用户输入了一组数据:7 19 -5 6 2 0,那么程序将会把前五个有效数据保存在一个数组中,即7 19 -5 6 2,然后把这个数组中的值按逆序重新存放,即变成了 2 6 -5 1原创 2017-04-06 22:02:13 · 489 阅读 · 0 评论 -
排序(3)直接插入排序
直接插入排序是一种最简单的方法,也被称为简单插入排序。基本思想:第i趟排序将序列中的第i+1个元素K(i+1)插入到一个已经按值有序的子序列(K1,K2……Ki)中合适的位置,使得插入后的序列仍然保持按值有序。一个包含n个元素的序列,需要n-1趟的直接插入排序就可以将原序列排列有序。算法如下:void insertsort(keytype k[],int n) { int原创 2017-05-20 16:53:38 · 350 阅读 · 0 评论 -
排序(4)希尔排序
希尔排序又称为"缩小增量排序",是对插入排序的一种改进。基本思想:设定一个元素间隔增量gap,将参加排序的序列按这个间隔数gap从第一个元素开始依次分成若干个子序列。在子序列中再用其他排序方法,然后缩小增量gap,重新将整个序列按照新的间隔数gap进行划分,再分别对每个子序列进行排序。如此将“缩小增量gap——划分序列——将每个子序列排序”的操作进行下去,直到间隔数增量gap=1为止。原创 2017-05-20 17:08:46 · 354 阅读 · 0 评论 -
排序算法(5)选择排序
基本思想:第i趟排序从序列的后n-i+1(i=1,2,……,n-1)个元素中选择一个最小的元素,与该n-i+1个元素的最前面那个元素进行位置交换,也就是与第i个位置上的元素进行交换,直到i=n-1。直观地说,每一趟的选择排序就是从序列中未排好顺序的元素中选择一个最小的元素,将该元素与这些未排好顺序的元素的第一个元素交换位置。void selectsort(keytype k[],int原创 2017-05-20 19:22:00 · 372 阅读 · 0 评论 -
排序算法(6)堆排序
堆排序是对简单选择排序的一种改进。堆排序有大顶堆(根结点最大)和小顶堆(根结点最小)之分。基于大顶堆的完全二叉树,其核心思想为:1)将原始序列构成一个堆。(建立初始堆)2)交换堆的第一个元素和堆的最后一个元素的位置;3)将移走(交换)最大值元素之后的剩余元素所构成的序列再转换为一个堆。4)重复上述过程(2)、(3)步n-1次问题:(1)、如何将原始序列构成一原创 2017-05-20 19:54:05 · 284 阅读 · 0 评论 -
排序算法学习(2)
1、 堆排序每趟总能选出一个最大值或者最小值位于根结点。冒泡排序总是两两比较选出一个最小值位于数组前面。(第一趟排序后最大值会在最后面,第二趟次最大值在次最后面) 选择排序(第一趟排序之后最小值会在最前面,第二趟排序会在次前面) 快排选出的枢轴在一趟排序中就位于最终的位置。(以一个值为分界点) 直接插入排序不一定位于最终的位置,因为不确定后面插入的元素对于前原创 2017-05-21 10:20:19 · 294 阅读 · 0 评论 -
排序算法学习(3)
1.优化的起泡排序的排序趟数与参加排序的序列原始状态有关。(正确)2.对任何用顶点表示活动的网络(AOV网)进行拓扑排序的结果都是唯一的。(错误)3.在分配排序时,最高位优先分配法比最低位优先分配法简单。(错误)4.在排序算法中每一项都与其他各项进行比较,计算出小于该项的项的个数,以确定该项的位置叫:枚举排序。 枚举排序,通常也被叫做秩排序,算法基本思想原创 2017-07-20 12:42:15 · 3021 阅读 · 0 评论 -
排序算法学习(4)
1. 对下列关键字序列用快排进行排序时,速度最快的情形是(A)A{21,25,5,17,9,23,30}B{25,23,30,17,21,5,9}C{21,9,17,30,25,23,5}D{5,9,17,21,23,25,30}分析:pivotkey的选择越靠近中央,即左右两个子序列长度越接近,排序速度越快。21正好是序列的正中,所以排除B,D。A经过一次排序后结果为原创 2017-07-21 22:07:24 · 1452 阅读 · 0 评论 -
排序算法学习(5)
1. 将2个各有N个元素的有序表归并成一个有序表,其最少的比较次数是:N分析:归并排序最少比较N,最多比较2N-1.当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需要用第二个表中的第一个元素依次与第一个表的元素比较,总计比较n次。 分析二:A(a0,a1,...aN)、B(b0,b1,...bN)为长度为N的有序表。假设A中元素都比B中要小,则先比较N次将A中元原创 2017-07-21 22:39:05 · 731 阅读 · 0 评论 -
排序算法学习(6)
1. 对序列{15,9,7,8,20,-1,4}用希尔排序方法排序,经一趟后序列变为{15,-1,4,8,20,9,7}则该次采用的增量是:4分析:15,9,7,8,20,-1,4,排序后,9和-1交换,即1号和5号互换,增量为5-1=4。而增量为1就是直接插入排序。 2. 对同一待排序序列分别进行折半插入排序和直接插入排序,两者直接可能的不同之处是:元素之间的比较次数。分析:折半原创 2017-07-23 13:34:38 · 2535 阅读 · 0 评论 -
排序(2)快速排序
快速排序:是对冒泡排序的一种改进。(因为快排算法元素间的比较次数比较少,速度快,因而得名快排。在各种内部排序方法中,快排被认为是目前最好的一种排序方法。)快排之所以效率高,是因为每次元素的移动都是跳跃式的。每趟的排序都要指定一个基准点,把小于等于基准元素的所有元素都移动到基准元素前面,把大于等于基准元素的所有元素都移动到基准元素后面,元素移动的间隔距离较大,因此总的比较和移动次数减少,原创 2017-05-20 16:32:16 · 457 阅读 · 0 评论 -
排序(1)冒泡排序
冒泡排序:是一类具有“交换”性质的排序方法。冒泡排序可与此处一起比较点击打开链接一个包含n个元素的序列要进行n-1趟的冒泡排序,第i趟要将第1~n-i+1个元素中最大的元素交换到第n-i+1个位置上。这种排序方法就是通过序列中相邻元素之间的交换,使较小元素从序列的后端移动到序列的前端,使较大的元素从序列的前段移动到后端。冒泡排序算法:void bubblesor原创 2017-05-20 16:03:40 · 379 阅读 · 1 评论 -
ADV-104-算法提高-打水问题
算法提高 打水问题问题描述 N个人要打水,有M个水龙头,第i个人打水所需时间为Ti,请安排一个合理的方案使得所有人的等待时间之和尽量小。输入格式 第一行两个正整数N M 接下来一行N个正整数Ti。 N,M输出格式 最小的等待时间之和。(不需要输出具体的安排方案)样例输入7 33 6 1 4 2 5 7样例输出11提示 一种最佳打水方原创 2017-04-06 22:04:29 · 409 阅读 · 0 评论 -
快速排序
快速排序排序在各种场合经常被用到。快速排序是十分常用的高效率的算法。其思想是:先选一个“标尺”,用它把整个队列过一遍筛子,以保证:其左边的元素都不大于它,其右边的元素都不小于它。这样,排序问题就被分割为两个子区间。再分别对子区间排序就可以了。下面的代码是一种实现,请分析并填写划线部分缺少的代码。#include voi原创 2017-03-27 22:10:43 · 227 阅读 · 0 评论 -
C++ sort 排序(降序、升序)使用总结
一、升序 C++ sort 函数十分方便,可以对内置类型也可对自定义类型进行快速排序,内置类型的使用比较简单,下面主要讨论自定义类型的排序,一般有如下几种使用方法:1.1 重载比较操作符 比如,我们现有一批学生,要根据他们的成绩进行升序排序,成绩如果相等则根据名字升序排序,那么我们可以如下操作:[cpp] view plain c转载 2017-03-25 14:36:29 · 15852 阅读 · 0 评论 -
搭积木
小明最近喜欢搭数字积木, 一共有10块积木,每个积木上有一个数字,0~9。 搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。 最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法: 0 1 2 3 4 5 6 7 8 90 3 1 7 5 2 9 8 6 4 请你计算这样的搭法一共原创 2017-03-28 20:26:55 · 333 阅读 · 0 评论 -
方格填数-(全排列)
填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。思路: 全排列0~9,判断是否相邻,若为相邻则两数之差的绝对值为1#include#include#include#i原创 2017-03-28 20:02:33 · 408 阅读 · 0 评论 -
搭积木
搭积木 (DFS)小明最近喜欢搭数字积木, 一共有10块积木,每个积木上有一个数字,0~9。 搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。 最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法: 0 1 2 3 4 5 6 7 8 90 3 1 7 5 2 9 8 6 4转载 2017-03-15 19:52:37 · 537 阅读 · 0 评论 -
李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像转载 2017-03-30 19:49:46 · 229 阅读 · 0 评论 -
ADV-70-算法提高-冒泡法排序
算法提高 冒泡法排序输入10个数,用“冒泡法”对10个数排序(由小到大)这10个数字在100以内。样例输入1 3 6 8 2 7 9 0 4 5样例输出0 1 2 3 4 5 6 7 8 9#include using namespace std;int a[10];int main() { int c; for(int i=0;i<10;i++) {原创 2017-04-06 19:54:02 · 240 阅读 · 0 评论 -
排序算法学习(1)
1、 在外部排序时,利用选择树方法在能在能容纳m个记录的内存缓冲区中产生的初始归并段的平均长度为2m个记录。(正确。归并排序是将两个长度相当序列合并成一个序列,初始序列长度为m,那么合并之后的平均长度为2m)2、 已知待排序的n个元素可分为n/k个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间原创 2017-05-20 15:04:52 · 2542 阅读 · 0 评论 -
堆-神奇的优先队列
如何建立堆?1)从空的堆开始,然后依次往堆中插入一个元素,直到所有的数都被插入(转移到堆中)为止。因为插入第i个元素所用的时间是O(logi),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下:n=0;for(i=1;in++;h[n]=a[i];siftup(n);} 2)把n个元素建立一个堆,首先将这n个节点以自顶向下,从左到右方式从1到原创 2017-04-22 18:54:43 · 310 阅读 · 0 评论