一、选择排序
核心思想:
以数组为例:取出数组的最大值(最小值),然后将最大值与数组的第一位进行交换。
讲解:第一次遍历获取第一位到最后一位的最大值,与第一位交换位置,第二次遍历获取第二位到最后一位的最大值与第二位交换位置,以此类推,当数组遍历完成后数组也就排序完成。
代码:
二、插入排序
核心思想:
将数据插入到一个有序的数组中。
讲解:将数组的第一位看成有序的,从第二位开始与其前一位进行比较,如果大于前一位就交换位置否则进行第三位,第三位与第二位进行比较,第三位大于第二位,交换位置然后与第一位比较大于就交换位置,否则进入第四位,以此类推,思想也比较简单。
看代码理解:
插入排序三、插入排序的优化
正常来说,插入排序较选择排序来说循环可以提前终止,理论上插入应该比选择效率要高。但是经过测试后发现,其效率比低。究其原因是因为每一次交换需要三次赋值,大大降低了其效率。
优化思想,将需要插入的数据取出来,与前一位进行比较,如果满足判断条件就将前一位向后移一位,若不满足条件就将其赋值给前一位(注意数组下表越界问题)。
代码:
优化后的插入排序优化后效率明显提升,对于数据来说,越有序的数据使用插入排序效率越高,插入排序是O(n2)级别的算法,对于一个有序的数据,其效率为O(n)。插入排序的优化应该掌握。
网友评论