排序
wbprime
Blablabla
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序算法之二 冒泡排序
冒泡排序(Bubble sort)的算法原理如下:从第一个元素开始,每两个元素进行比较,将较大的元素放在后面;比较之后,进行下一对比较;一直到最后一个元素,这样得到的最后一个元素就是整个数组里面的最大值,这个过程就称之为冒泡。以这种方式对剩余的元素进行冒泡,最后就得到了排好序的数组序列。冒泡排序法是稳定的;算法很简单,下面直接贴出代码。void bubbleSort(double *原创 2012-08-23 20:54:05 · 313 阅读 · 0 评论 -
排序算法之四 Shell排序
Shell 排序是将待排序序列 d 进行分组排序,分组排好序之后,在增大组数(也就是减小分组间隔)来进行分组排序,一直到分组间隔足够小(为 1 时)就得到了排好序的结果数组。Shell 排序过程示例如下:待排序数组:10 6 3 7 2 8 9 2 4 1 n = 10Step1:以 (10/2 = 5) 为分组间隔进行排序:i 与(i+5),i + 5 结果:10 6原创 2012-08-23 21:44:19 · 371 阅读 · 0 评论 -
排序算法之一 选择排序
开始了对排序算法的学习,现在进行系统地整理一下。说到排序,维基百科上面的解释是,排序算法(Sorting algorithm)是一种能将一串数据依照特定排序方式的一种算法。对排序算法进行分析和评价,可以从时间复杂度(最差和平均)、空间复杂度和稳定度上面来进行。当进行排序时,最容易想到的算法就是,遍历待排序的序列,找出最大值、次大值。。。,然后按照大小顺序进行重排。这就是选择排序的思原创 2012-08-23 20:03:11 · 676 阅读 · 0 评论 -
排序算法之六 快速排序
快速排序(Quick sort),是一种分治算法的实现,其思想为:在待排序数列里面选择一个基准(pivot)将数列分为两个部分,其中基准之前的部分都比基准值小,后半部分大于基准值,这个操作称之为分区(partition);然后分别对前后半部分进行分区操作。算法示例:待排序数组:10 6 3 7 2 8 9 2 4 1 n = 10 首先进行分区。令 left 表示左边界,righ原创 2012-08-24 10:35:19 · 297 阅读 · 0 评论 -
排序算法之三 插入排序
插入排序的原理在于,将数字序列 d 分为两个序列(前者有序,后者无序),每遍历一个元素就将该元素插入到前半部份的合适位置。插入排序的算法原理很容易理解,实现步骤如下:i = 0,将 d[i] 插入到 i 之前的有序序列之中;i = i + 1,将 d[i] 插入到 i 之前的有序序列之中,插入的过程为将自己与自己之前的元素进行比较,如果自己比其前面的元素都大,则什么也不用做;否则就插入原创 2012-08-23 21:15:58 · 312 阅读 · 0 评论 -
排序算法之五 归并排序
归并排序(Merge sort),是一种分治排序法,将排序任务分为三个部分:前半部分的递归排序、后半部分的递归排序以及已排好序的前后两部分的合并。归并法是一种递归的算法,是通过函数的递归调用来实现的。示例如下:待排序数组:10 6 3 7 2 8 9 2 4 1 n = 10Step1:原数组分为数组A: 10 6 3 7 2 和数组B:8 9 2 4 1的分别排原创 2012-08-23 23:13:58 · 366 阅读 · 0 评论 -
排序算法之六 堆排序
堆排序(Heap sort),是利用数据结构堆(Heap)来对数列进行排序的方法。堆类似于一种完全二叉树,其元素分布在一个数组之中,不同的树节点编号对应不同的数组索引号。比如:数组10 6 3 7 2 8 9 2 4 1 对应的堆形状类似于:总结起来,就是父节点 i 的左子节点在位置 (2*i);父节点 i 的右子节点在位置 (2*i+1);子节点 i 的父节点在位置 floor(原创 2012-08-24 12:05:29 · 334 阅读 · 0 评论
分享