摘要:
一、算法思想 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用,指的是将两个已经排序的序列合并成一个序列的操作。其归并思想如下:1)申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;2)设定两个指针,最初位置分别为两个已经排序序列的起始位置;3)比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;4)重复步骤3直到某一指针达到序列尾;5)将另一序列剩下的所有元素直接复制到合并序列尾; 在使用归并排序算法的时候,算法如下:1)将序列切分,直至切分到序列是有序的(这里通过将序列切分成单个元素达到目的);2)... 阅读全文
摘要:
一、算法思想 快速排序,顾名思义,效率比较于其他算法,效率比较高。《算法导论》也专门对其进行讲解。其算法设计使用分治思想,如下:1)从数组A[p...r]中选择一个元素,将数组划分成两个子数组:A[p...q-1]和A[q+1...r],使得A[p...q-1]中的元素全部小于等于A(q),使得A[q+1...r]中的元素全部大于A(q);2)通过递归调用快速排序,分别对A[p...q-1]和A[q+1...r]排序;3)因为两个子数组是就地排序,因此它们的合并不需要操作,整个数组A[p...r]已经排序;二、算法示意图 图中所示只是代表一次分的过程,其中红色的4代表选中的用于分割的数组元.. 阅读全文
摘要:
一、算法思想 选择排序是一种简单直观的排序算法。它的工作原理如下:1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列;2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。二、算法示意图 图中阴影部分是未排序的序列,黄色部分是排序好的序列。第一行是待排序的初始序列,最后一行是排好序的序列。 从第一行中选择出最小的元素1,将其和未排序序列的第一个元素交换,从而形成第二行。第二行从阴影部分找到最小的元素2,将2和阴影部分的第一个元素8交换,形成第三行。其实这个过程和冒泡排序非常相似,只是如何将下一个元素移动到排序序列的最末端的方... 阅读全文
摘要:
一、算法思想希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:1)插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率;2)插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位;我们将数组中两个元素之间的距离称为Gap,相邻元素之间的Gap自然是1,很明显的,插入排序的算法在调节元素的时候,Gap是1,这就造成了上面讲的低效的原因2)。因此希尔排序的思想如下:1)假设序列的元素个数是n,选取一个初始Gap的d(d= 1; gap = gap / 2) 7 ... 阅读全文
摘要:
一、算法思想一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:1)从第一个元素开始,该元素可以认为已经被排序2)取出下一个元素,在已经排序的元素序列中从后向前扫描3)如果该元素(已排序)大于新元素,将该元素移到下一位置4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置5)将新元素插入到该位置后6)重复步骤2~5如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。二、算法示意图如图所示,阴影部分表示待排序的部分,黄色部分则代表已经排序好的序列。排序过程就是将阴影部分的第一个元素从后往前插 阅读全文