摘要: 思想:多次将两个或两个以上的有序表合并成一个新的有序表。算法时间复杂度最好的情况下:一趟归并需要n次,总共需要logN次,因此为O(N*logN)最坏的情况下,接近于平均情况下,为O(N*logN)说明:对长度为n的文件,需进行logN 趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。稳定性 归并排序最大的特色就是它是一种稳定的排序算法。归并过程中是不会改变元素的相对位置的。缺点是,它需要O(n)的额外空间。但是很适合于多链表排序。(可以去看我博客中两个排序链表的合并)//将【first...mid】【mid....last】两个有.. 阅读全文
posted @ 2013-03-10 14:40 没离开过 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 希尔排序的时间复杂度为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) 编辑
摘要: 1.字符串长度:${#string}expr length $stringexpr "$string":'.*'这三种方法都可以。2.从字符串开始的位置匹配字串的长度expr match "$string" '$substring'expr "$string" : '$substring'$substring 是一个正则表达式3.匹配到子串的第一个字符的位置expr index $string $substring4.提取子串${string:position}${string:posi 阅读全文
posted @ 2013-03-08 16:22 没离开过 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 使用“”来防止单词分割。如果在参数列表中使用双引号,将使得双引号中的参数作为一个参数。即使双引号中的字符串包含多个单词(即有保护空白部分)也不会变成多个参数。var="a b c"COMMAND This is $varCOMMAND将以5个参数来执行 :"This" "is" "a" "b" "c"COMMAND "This is $var" 则参数变为一个:"This is a b c"转义(\)\n 新的一行\r 回车\t tab 阅读全文
posted @ 2013-03-07 21:55 没离开过 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 变量赋值虽然简单但也有很多需要注意的地方下面是一下我从书中整理出的注意点:1. 一定不要在赋值前后有空格VARIABLE =value 脚本将尝试运行一个“VARIABLE"的命令带着一个“=value"参数VARIABLE= value 脚本将尝试运行一个“value"的命令,带着一个被赋值成“”值的环境变量“VARIABLE".2.有无引用的区别hello="AB C D"echo $hello 输出ABCDecho “$hello“ 输出AB C Decho '$hello' 输出$hello引用一个变量讲保留其 阅读全文
posted @ 2013-03-07 21:34 没离开过 阅读(502) 评论(0) 推荐(0) 编辑