数据结构问题解答.docVIP

  • 25
  • 0
  • 约7.29千字
  • 约 8页
  • 2017-06-10 发布于北京
  • 举报
4、若有n个元素的序列近似有序,即除掉少数K个元素后是有序序列且Kn,在冒泡排序、快速排序、直接插入排序、堆排序方法中,请给出哪些方法不适合,哪些方法最快最适合,简述原因。 【参考解答】在待排序列近似有序的情况下,快速排序、堆排序都不太适合,直接插入排序、冒泡排序比较快。因为在这种情况下,快速排序接近最坏情况,时间复杂度接近O(n2),堆排序的时间复杂度仍然是O(nlogn),相反,由于比较和移动次数较少,直接插入排序和冒泡排序的时间复杂度接近O(n)(这里假设冒泡排序在一趟排序没有交换发生时结束。) 五、 设主串s和子串t分别以单链表存储,t和s 中每个字符均用一结点表示(如图)。即求:子串t在主串s中第一次出现的位置指针。 data Next 【分析】思路类似简单模式匹配算法,但是,链表不像数组那样方便(i=i-j+2)回溯,所以应该增加一个指针变量(如下程序中的指针变量 ps),记录每一趟开始匹配的起点。 【参考解答】采用简单模式匹配算法的思路,为方便回溯,增加一个指针变量记录每一趟匹配开始的位置。 // 字符结点结构 struct LNode { char data; LNode *next; }; // 链式存储的字符串类型(相当于不带头结点的单链表) typedef LNode *LString; // 字符串模式匹配 // 在主串s中查找子串t首次出现的位置,

文档评论(0)

1亿VIP精品文档

相关文档