对于一个基本有序的数组进行排序

十分简单,所以仅作个人记录


用快排肯定不好,因为他的原理是选定一个值,然后使得他的左边的数都比他小,右边的数都比他大


假定 1 2 3 4 5 100 6 7 8 200 9

可以考虑增强型冒泡

毫无疑问在第一次遍历的时候

结果是这样的

1 2 3 4 5 6 7 8 100 9 200

然后如果是普通冒泡的话,我们下一个将从2开始,所以我们需要修改这个算法

我们的目标就是定位到8,然后下一次从8开始遍历

怎么定位到8呢,8在这里的意思也就是代表了包括8以及之前的数都是有序的

所以不难想到,我们只需要在第一次记录5 100是不同的 然后就记录下了100

然后发现了比100大的数后,就找到了


可以考虑用插入排序

1 2 3 4 5 100 6 7 8 200 9

我们会从6开始把数一个个插入到100之前

效率也很不错

和增强冒泡类似


更好一点

之前考虑的情形都是在数组内

如果在链表内呢

我们假设他已经是成形的平衡二叉树了,然后那些不同的数我们剔除出来

只需要一个个插入即可了

所以效率近似于lgn

你可能感兴趣的:(算法题)