排序算法图解(插入、选择、冒泡、快速、合并、希尔)

插入排序

  1. 从左至右两两对比,右边的数比左边的小,交换,交换,不断往右移动

选择排序

  1. 选定最左边的数A,第二个数B,A和B比较,A>B则交换;B大于A,则取B后一位与A做相同的比较,不断右移遍历完,则把最小的放在了最左边。再取第二个数变为A,做同样的步骤

冒泡排序

  1. 同样是经过两两对比,比如下图,从左边开始,第1,2位数对比,大的右移,第2,3位数对比,大的右移,以此类推,知道遍历到末尾,则最大的数冒泡到最右边
  2. 再回到开头,再次按原方法对比右移,到前一次右移到末尾的前一位结束

快速排序

  1. 选择最左边的数作为基点A,位置标记为i,最右边标记为j,然后i右移,遇到比A大的停下,j向左移动,遇到比A小的停下,然后i和j对应的数交换
  2. 当i和j相遇后,i,j对应的数要和A对比,比A大,继续走,当i或j有个数比A小时,该数与A交换;然后分成两份,交换数的左边和右边各自执行同样的算法

合并排序

  1. 合并排序简而言之就是分而治之的思想
  2. 把所有数据一步步拆分,再不断的两两合并排序

希尔排序

  1. 希尔排序是基于插入排序的以下两点性质而提出改进方法的:
    1. 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
    2. 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位
  2. 希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步
  3. 然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。
  4. 假设有一个很小的数据在一个已按升序排好序的数组的末端。可能会进行n次的比较和交换才能将该数据移至正确位置。而希尔排序会用较大的步长移动数据,所以小数据只需进行少数比较和交换即可到正确位置

猜你喜欢

转载自www.cnblogs.com/sky-chen/p/10065038.html