2007winter

做自己真心想做的事,你就没事了

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

2012年6月8日

摘要: 所谓归并(merging)是将链两个或两个以上的有序表合并成一个新的有序表。先考虑一种特殊情形:设线性表L[1:n]中的某段L[low:high]已经部分有序,即它的两个子表L[low:mid]与L[mid+1:high]已经有序,现要将这两个有序子表归并成一个有序子表L[low:high]。实现上述两个子表的归并,基本做法如下:(1) 开辟一个与线性表L同样大小的表空间A;(2) 设置三个指针i,j,k,其初始状态分别指向两个有序子表的首部及表空间A中与L中需要进行排序段相对应空间的首部。即i=low, j=mid+1, k=0;(3) 沿两个有序子表扫描:若L[i]<L[j],则A[ 阅读全文
posted @ 2012-06-08 15:15 2007winter 阅读(141) 评论(0) 推荐(0)

摘要: 希尔排序是一种插入排序方法,实际上是一种分组插入方法。其基本思想是:先取一个小于n的整数d1作为第一个增量,所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序;然后,取第二个增量d2<d1,重复上述的分组和排序,直至所取的增量dt=1,即所有记录放在同一组中进行直接插入排序为止。希尔排序是不稳定的。代码:#include <iostream>using namespace std;void shellsort(double R[],int n){ int i,j,increment; double temp; increment=n/2; while (... 阅读全文
posted @ 2012-06-08 10:58 2007winter 阅读(121) 评论(0) 推荐(0)

摘要: 选择排序的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置);然后对剩下的子表采用同样的方法,直到子表空为止。对于长度为n的序列,选择排序需要扫描n-1遍,每一遍扫描均从剩下的子表中选出最小的元素,然后将该最小的元素与子表中的第一个元素进行交换。第i趟排序开始时,当前有序区和无序区分别为R[0…i-1]和R[i…n-1],该趟排序则是从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R[i]交换,使R[0…i]和R[i+1…n-1]分别为新的有序区和新的无序区。因为每趟排序均使有序区中增加了一个记录,且有序区中的记录关键字均不大于无序区中 阅读全文
posted @ 2012-06-08 10:25 2007winter 阅读(158) 评论(0) 推荐(0)