所有排序算法汇总,冒泡,选择,插入,快速,优化快速,归并,希尔,堆排序
Posted chenyoude
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了所有排序算法汇总,冒泡,选择,插入,快速,优化快速,归并,希尔,堆排序相关的知识,希望对你有一定的参考价值。
冒泡排序,不多说,两次for循环比较相邻两个元素的大小,然后进行交换。
选择排序,我们第一次for循环遍历所有元素,并把当前元素假设为最小的元素,然后再一个for循环去寻找真正最小的元素进行交换,这样每次我们都能找到未排序元素中的最小的元素。
插入排序,我们第一个for循环遍历所有元素,保存当前元素的位置,遍历该元素前面所有的元素,如果前边的元素的值比自己大,那么就进行交换,每次都确保左边都是比自己小的元素,右边都是比自己大的元素。
快速排序,选择第一个元素作为基准值,然后把比他小的元素放他左边,比他大的元素放他右边,然后再对他左边的元素进行同样的操作,对他右边的元素进行同样的操作,即递归。
优化快速排序,我们在选择主元之前提前把比他小的元素放在他左边,比他大的元素放在他右边,而不是在之后递归的时候做,也就是找一次基准值就行了,那怎么实现呢?我们在一个乱序数组中,设定一个左指针和一个右指针,然后左指针往右移,右指针往左移,如果左指针指向的元素大于基准值停下来,右指针遇到比基准值小的元素就和左指针交换,直到left大于right交换就结束了,最后交换右指针对应元素与基准值的位置,返回右指针的位置,即可得到基准值的位置,然后进行递归排序。
归并排序,我们把一个打乱的数组分成两份后再分成两份,一直分到最后,然后开始进行合并,合并的时候只需要对两个合并的数组进行判断,对两个数组的元素进行比较,一直拿出最小的一个元素,拿出来后指针加一,然后一直合并再合并。
希尔排序,设定一个增量值,该增量值值确定了每次要比较元素之间的索引差,最后一个索引差必须为1。一般增量值设定成数组长度的一半,一半的一半。通过比较数组第0个元素和数组第0+增量值个元素大小后排序,然后第1个…之后比较另一个增量值,知道最后全部排序成功。
堆排序,堆排序在堆那一节详细说明了,其实就是用堆的特性来完成排序,每次添加都维持堆的特性添加元素,然后在提取的时候,每次提取提取的都是最大值。
以上是关于所有排序算法汇总,冒泡,选择,插入,快速,优化快速,归并,希尔,堆排序的主要内容,如果未能解决你的问题,请参考以下文章
学习数据结构笔记====>不同的排序算法(Sort Algorithm)[冒泡,选择,插入,快速,希尔,基数,归并]