一个记录插入到排好序的有序表中,直到无序区中没有记录为止,从而得到一个新的有序表。直接插入排序是一种稳定的排序方法,其时间复杂度为O
。4希尔排序函数的实现函数声明:voidshellsortsqlistbi
t
希尔排序又称增量缩小排序,基本思想是先将序列按增量划分为元素个数相同的若干子序列,在子序列内分别进行直接插入排序,然后不断缩小增量直至为1,最后使用直接插入排序法完成排序。
5折半插入排序函数的实现函数声明:voidDichotomyi
tai
t
;二分排序法的基本思想是:在插入第i个元素时,对前面的0~i1个元
素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半元素进行折半,直到leftright,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。6快速排序函数的实现
函数声明:voidoutputsqlistbi
t
输出元素值首先选一个轴值(即比较的基准),将待排序记录分割成独立的两部分,左侧记录的关键码均小于或等于轴值,右侧记录的关键码均大于或等于轴值,然后分别对这两部分重复上述过程,直到整个序列有序。快速排序是一种不稳定的排
f序方法,时间复杂度为O(
log2
)7堆排序函数的实现函数声明:voidsiftsqlistri
tsi
tm
首先将待排序的记录序列构造成一个堆,此时,选出了堆中所有记录的最大者即堆顶记录,然后将它们从堆中移走(通常将堆顶记录和堆中最后一个记录交换),并将剩余的记录再调整成堆,这样又找出了次大的记录,依此类推,直到堆中只有一个记录为止。堆排序是一种不稳定的排序方法,总的时间复杂度为O
log2
。8二路归并排序函数的实现函数声明:voidMergesqlistasqlistbi
tlowi
tmidi
thighvoidMergePasssqlistasqlistbi
t
i
tle
thvoidMergeSortsqlistai
t
合并排序:这里的合并排序和下边要描述的快速排序都采用了分而治之的思想,但两者仍然有很大差异。合并排序是将一个无序数组
1…r分成两个数组
1…r2与
r21…r,分别对这两个小数组进行合并排序,然后再将这两个数组合并成一个大数组。由此我们看出合并排序时一个递归过程(非递归合并排序这里不做讨论)。合并排序的主要工作便是“合并”,两个小规模数组合并成大的,两个大的再合并成更大的,当然元素比较式在合并的过程中进行的。
92路插入函数的实现92路插入排序是在折半插入排序的基础上发展。其目的是减少排序过程中
记录移动的次数,但为此需要
个记录的辅助空间。具体做法是:另设一个和Lrr