插入、选择、冒泡排序的综述
插入、选择、冒泡排序算法都比较简单,平均时间复杂度均为O(n2),属于低效的排序。问题在于,我们需要深入认识并理解他们的排序思想:
1 插入排序:
插入排序的基本原则是这样的:从第二个元素开始,到最后一个元素(共n-1趟遍历),对于每个当前元素,如果它前面的元素元素比该元素大(比如a[0]》a[2]),那么将这些前面的元素都向后移动一位,同时将当前元素插入到空位处!!!
在此,我们抓住插入排序的两个要点:1 对n-1个元素均要进行比较操作;2 每一次的比较 都是 拿当前元素 与其前面所有的数进行比较(可以认为这是一种全局性的比较)。
2 选择排序:
选择排序的原则是这样的:先从所有n个数中选择最小的,把它放在第一位;再从剩下的n-1个数中选择最小的,把它放在第二位;......(剩下操作雷同,有没有感觉选择排序很像我们日常的操作方式?)。
在此,给出选择排序的两个要点:1 每次的比较都是 在当前剩下的所有数中找一个全局最小的(尽管和插入排序比较的对象不同,但是比较的范围是相同的,只不过是倒着来的)2 我们要进行n-1次选择最小这样的操作(最后剩下的一个自然是最小的)
3 冒泡排序:
冒泡排序的原则是这样的: 第一轮冒泡,将最大的数冒泡到最后,第二轮冒泡将次大的数冒泡到倒数第二的位置....(剩下的操作雷同),因此一共进行n-1次冒泡。每一轮的冒泡,是扎样操作的:将相邻的元素比较(从标号0的数开始),如果前面的数大于后面的数,则将其冒泡到后面(即交换位置),一直到冒泡到属于这个元素应该在的位置(比如最大的数,冒泡到最后),因此这里的比较,是局部操作,但是一轮冒泡,整体上仍然是一种全局操作。
仔细观察上述操作,我们发现他们的共同点在于: 要完成所有元素的排序,总要进行n-1个“大操作”;对于每一次的操作,都是一种“全局比较操作”。这也是为什么他们的时间复杂度都是O(n2)。