摘要: 希尔排序的时间复杂度为O(n*log2n) 空间复杂度为O(1)是一种不稳定的排序算法思想:希尔排序也是一种插入排序方法,实际上是一种分组插入方法。先取定一个小于n的整数d1作为第一个增量,把表的全部记录分成d1个组,所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序;然后,取第二个增量d2(<d1),重复上述的分组和排序,直至所取的增量dt=1(dt<dt-1<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。 void ShellSort(int* data ,int length){ if( data == NULL || length 阅读全文
posted @ 2013-03-09 21:11 没离开过 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 直接选择排序的时间复杂读为O(n*n)空间复杂度为O(1),是一种不稳定的排序。void SelectSort(int* data,int length){ if(data == NULL || length <=0) return; for(int i =0 ; i < length ; ++i ) { int indexofmin = i; //最小值 for( int j=i; j < length ; j++) { if( data[j] < data[indexofmin]) ... 阅读全文
posted @ 2013-03-09 20:36 没离开过 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 直接插入排序的时间复杂度为O(n*n)空间复杂度为O(1)是稳定的排序算法直接插入排序是把序列分成有序队列和无序队列,再把无序队列中的数一个个插入到有序队列中恰当的位置void InsertSort(int* data, int length){ if( data == NULL || length <=0 ) return; for(int i = 1; i < length; ++i) { if( data[i] < data[i-1]) //有序序列为(0~i-1),无序序列为(i~length-1) { ... 阅读全文
posted @ 2013-03-09 20:25 没离开过 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序算法的时间复杂度为O(n*n),空间复杂度为O(1),是一种稳定的排序方法。void SubbleSort(int *data, int length){ if(data == NULL || length <=0 ) return; bool exchange=false; for(int i = 0 ; i < length ; ++i) { exchange = false; for(int j = length-1; j >i ; --j) { if( data[j] < da... 阅读全文
posted @ 2013-03-09 19:52 没离开过 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 快速排序在最优情况下,它的排序时间复杂度为O(nlog2n)。即每次划分序列时,能均匀分成两个子串。但最差情况下它的时间复杂度将是O(n*n)。快速排序是种不稳定的排序方法。快速排序是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。int partition(in 阅读全文
posted @ 2013-03-09 16:01 没离开过 阅读(171) 评论(0) 推荐(0) 编辑