
数据结构
bullzerone
每天进步一点点
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
快速排序
快速排序(QUICK SORT)是由C.A.R Hoarse提出的一种排序算法。原创 2014-08-06 19:51:38 · 408 阅读 · 0 评论 -
堆排序
今天学了一下堆排序。 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。 如果根节点的编号为i,那么它的左孩子的编号为2*i+1,右孩子的编号为2*i+2,大根堆的要求是每个节点的值都不大于其父节点的值, 即Root[i].key>=Lchild[2*i+1].key原创 2015-06-12 23:37:26 · 403 阅读 · 0 评论 -
Qt中QStack简单应用
栈就是一种后进先出的数据结构,就是最先进入的数据在栈的最底下,最后才出来,最后进入的数据,在栈的顶端,最先出来。 下面利用栈实现了一个简单十进制到二进制的转换。 比如十进制的 10 转换为 二进制。必须明白数制之间是如何转换的。对于十进制到二进制的转换,是整除取余数,反复直到被转换数为0. d r= d%2 d=d/2 10 0 5 5 1 2 2 0原创 2015-07-10 00:33:14 · 7636 阅读 · 0 评论 -
希尔排序
希尔排序也称作缩小增量排序。是对插入排序的一种改进。每次有一个增量d>=1,每次把待排序数组分为以d为间隔的几组数字。然后每次对以d为间隔的部分数组进行插入排序,这样跨度较普通的插入排序大,查找与交换的次数也减少。 然后缩小间隔增量d,继续进行插入排序,直到增量变为1,这就和普通排序一样了,但是,经过前面的增量d>1的排序,大部分数字已经有序了,自然交换的次数就少了,速度也就提高了。对于增量的选择原创 2015-06-05 00:12:08 · 500 阅读 · 0 评论 -
二分法排序(折半插入排序)
有一次看到人家的面试题,什么给定一个整型数组,让用二分法对数组进行排序。一开始直接蒙了,什么叫二分法排序?后来查了一下,就是插入排序前,对前面已经排好序的元素进行折半,以期比普通的插入排序更快速定位到要插入的位置。崩溃!!! 我们用下面的图简单演示一下: 【4】为待插入的关键字,前面的【1,3,5,6,7,8,9】是已经排好序的。开始L=0指向A【0】=1,R=6指向A【6】=9,M=(L+R)原创 2015-06-04 00:06:46 · 809 阅读 · 0 评论 -
插入排序
今天学习了一下插入排序: 插入排序类似我们平时打扑克牌时整理牌。@代表移动后空出来的位置 比如我们先拿到一个10,这时手里只有一张牌,本身就是有序的,所以插入排序应该从第二个元素开始排序 【10】 下次我们拿到了5,这时5是待排序的关键字,我们先和手里已有的牌10,比较,5<10,我们就可以把10向后移动【@,10】,然后把5放在原来10的位置上, 【5,10】 再下次我们拿到了3,我们原创 2015-06-02 22:42:04 · 390 阅读 · 0 评论 -
统计连续子数列的最值
给定一个整型数组,数组中的数组元素可能为正也可能为负值,求出该数组中元素连续相加的最大值。也就是求出和值最大的子数列。 比如给定一个数组 a【8】 = {1,-2,-5,3,8,-7,9,4},这个很显然, 最大的和值为a【3】+a【4】+a【5】+a【6】+a【7】 = 3+8+ -7+9+4=17 的值。 我想了最笨的方法: 就是把每个连续的子序列组合找出来,然后求出和值,然后挑出最大的原创 2015-06-19 00:28:07 · 489 阅读 · 0 评论 -
冒泡排序
今天学习一下冒泡排序。 冒泡排序是学习计算机的时候,比较简单的一个排序算法,它的过程就是依次的两两比较挨着的元素,如果他们的顺序是错误的,就交换他们的位置,直到把最大(或最小)的元素放在最后一个位置。然后继续重复的再次两两比较,把次大的元素放在倒数第二个位置上,到最后,把所有的元素放在正确的位置上,这就会好像气泡依次往上浮一样。下面是一个例子。 初始序列A[5]={【4】,2,0,3,1} 第原创 2015-04-16 20:07:14 · 564 阅读 · 0 评论 -
选择排序
这次学习一下选择排序。 首先先从待排序序列中选择一个最小的放在第一个位置,然后再从余下的序列中选择一个次小的放在第二个位置。然后重复的选择下去,直到所有元素排完。 假设有一个序列a【5】={2,1,0,6,4} 我们可以假设最小的值就在a【0】处,这样我们就从a【1…4】中一次从左到右的与假设的最小值比较,如果比假设的值小,那么最小值得下标就更改,最值也更改,直到找到最小值,然后与a【0】交换原创 2015-04-15 23:00:36 · 402 阅读 · 0 评论 -
折半查找
现在学习一下折半查找算法。折半查找是在一个已经有序的序列中查找某一个关键字的位置或者要查找的关键字在不在该有序的序列 中。 该算法的关键是要在其中查找关键字的序列必须是有序的。 假设待查找的关键字是key,序列的中间位置的下标是mid。查找的时候先从有序序列的中间位置开始。如果key正好等于mid下标所在的元素的值,则查找到并返回key的下标;如果key大于mid所在下标的元素值,那么就说明k原创 2015-04-12 21:36:41 · 1406 阅读 · 0 评论 -
归并--排序
归并排序采用的是一种分而治之的策略。首先将待排序数组划分为若干有序数组,然后再两两合并为有序的数组,到最后合并为一个有序数组。 归并排序主要看怎么把待排序数组划分为有序数组和怎么将两个有序的数组合并为一个有序数组。 划分好说,我们可以一分为二 的划分数组,直到划分的子数组只有一个元素为止,只有一个元素时,它自然是有序的。 划分和归并我们可以用下面的图简单演示一下: 关于归并我们演示一下{原创 2015-06-14 17:01:59 · 388 阅读 · 0 评论