随笔分类 -  数据结构&算法

摘要:希尔排序(Shell Sort)又称为“缩小增量排序”。是1959年由D.L.Shell提出来的。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。具体做法:首先确定一组增量d0,d1,d2,d3,...,dt-1()其中n>d0>d1>...>dt-1=1),对于i=0,1,2,... 阅读全文
posted @ 2011-05-19 23:45 elwin 阅读(1874) 评论(0) 推荐(0)
摘要:插入排序是最简单最直观的排序算法了,它的依据是:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止。 算法的复杂度也是简单的,排序第一个需要1的复杂度,排序第二个需要2的复杂度,因此整个的复杂度就是 1 + 2 + 3 + …… + N = O(N ^ 2)的复杂度。View Code 1 #include <iostream> 2 3 using namespace std; 4 5 void insertSort(int a[],int n) 6 { 7 int j,i,key; 阅读全文
posted @ 2011-05-19 21:20 elwin 阅读(186) 评论(0) 推荐(0)
摘要:1、算法思想分治发自顶而下实现归并排序:(1)分治法的三个步骤 设归并排序的当前区间是R[low..high],分治法的三个步骤是:①分解:将当前区间一分为二,即求分裂点②求解:递归地对两个子区间R[low..mid]和R[mid+1..high]进行归并排序;③组合:将已排序的两个子区间R[low..mid]和R[mid+1..high]归并为一个有序的区间R[low..high]。 递归的终结条件:子区间长度为1(一个记录自然有序)。(2)具体算法 void MergeSortDC(SeqList R,int low,int high) {//用分治法对R[low..high]进行二路归并 阅读全文
posted @ 2011-05-19 20:36 elwin 阅读(343) 评论(0) 推荐(0)
摘要:已知数组int[] dec={0,5,2,9,7,4,3};用快速排序算法按升序对其进行排列,并返回数组算法过程 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是: 1)设置两个变量I、J,排序开始的时候:I=1,J=N; 2)以第一个数组元素作为关键数据,赋值给X,即 X=A[1]; 3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,让该值与X交换; 4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找 阅读全文
posted @ 2011-05-19 15:30 elwin 阅读(239) 评论(0) 推荐(0)
摘要:冒泡排序是一种交换排序。 交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时则进行交换,知道没有反序的记录为止。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 冒泡排序:算法描述省略就了。。。 算法c实现: 1 #include <iostream> 2 using namespace std; 3 4 void bubbleSort(int a[],int n) 5 { 6 int i,j,tmp; 7 int exch = 0; 8 for(i = 0;i < n;i++) 9 {10 exch = 0; //交换标志11 for(j 阅读全文
posted @ 2011-05-19 15:29 elwin 阅读(214) 评论(0) 推荐(0)