摘要:
快速排序2(算法交换链表节点,平均时间复杂度O(nlogn),不考虑递归栈空间的话空间复杂度是O(1))这里的partition,我们选取第一个节点作为枢纽元,然后把小于枢纽的节点放到一个链中,把不小于枢纽的及节点放到另一个链中,最后把两条链以及枢纽连接成一条链。这里我们需要注意的是,1.在对一条子... 阅读全文
摘要:
快排不适合同于链表,但是可以实现,时间复杂度为o(nlgn)平均时间复杂度O(nlogn),不考虑递归栈空间的话空间复杂度是O(1))分析:由于单链表是没有prev指针的,所以跟数组一样的low,high指针就不适合单链表方法一:不移动元素节点本身,只移动元素的值 /... 阅读全文
摘要:
注意:快排是不稳定算法无论是low,还是high,都是a[low]=pivot,等于号是包含的,也就是出现元素与pivot相等的时候,是不移动这个相等的元素的#includeusing namespace std;int Partition(int*arr,int low,int high);vo... 阅读全文
摘要:
思想:把待排序的链表分为已经排序的链表,和剩余未排序的链表例如:3->4->1->5->2->NULL已经排序完毕的的链表:(从第一个数开始) 3->NULL 未排序完毕的链表:4->1->5->2 用p表示还未排序的剩余链表的首节点例如:3->4->NUL... 阅读全文
摘要:
折半插入排序:没有哨兵的概念。a[0]只要是保存待插入元素改善:减少了元素之间的比较次数,但是元素之间的移动次数没有改变。#includeusing namespace std;void BInsertSort(int a[],int length){ int i,j; ... 阅读全文
摘要:
主要是哨兵的作用,把arr[0]位置作为哨兵,哨兵有两个作用:1.是保存待插入的元素,相当于temp的作用,因为每次比较,都会移位,后面的元素的值都会被前面的覆盖2.用于监视,是否数组越界,j=0时,a[j]=a[0],此时会跳出for循环。用于监视数组越界,若不使用哨兵a[0],则每次循环都要判断... 阅读全文