码迷,mamicode.com
首页 > 编程语言 > 详细

所有排序算法汇总,冒泡,选择,插入,快速,优化快速,归并,希尔,堆排序

时间:2018-11-03 16:26:56      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:通过   必须   遍历   假设   hellip   for   之间   个数   归并排序   

冒泡排序,不多说,两次for循环比较相邻两个元素的大小,然后进行交换。

选择排序,我们第一次for循环遍历所有元素,并把当前元素假设为最小的元素,然后再一个for循环去寻找真正最小的元素进行交换,这样每次我们都能找到未排序元素中的最小的元素。

插入排序,我们第一个for循环遍历所有元素,保存当前元素的位置,遍历该元素前面所有的元素,如果前边的元素的值比自己大,那么就进行交换,每次都确保左边都是比自己小的元素,右边都是比自己大的元素。

快速排序,选择第一个元素作为基准值,然后把比他小的元素放他左边,比他大的元素放他右边,然后再对他左边的元素进行同样的操作,对他右边的元素进行同样的操作,即递归。

优化快速排序,我们在选择主元之前提前把比他小的元素放在他左边,比他大的元素放在他右边,而不是在之后递归的时候做,也就是找一次基准值就行了,那怎么实现呢?我们在一个乱序数组中,设定一个左指针和一个右指针,然后左指针往右移,右指针往左移,如果左指针指向的元素大于基准值停下来,右指针遇到比基准值小的元素就和左指针交换,直到left大于right交换就结束了,最后交换右指针对应元素与基准值的位置,返回右指针的位置,即可得到基准值的位置,然后进行递归排序。

归并排序,我们把一个打乱的数组分成两份后再分成两份,一直分到最后,然后开始进行合并,合并的时候只需要对两个合并的数组进行判断,对两个数组的元素进行比较,一直拿出最小的一个元素,拿出来后指针加一,然后一直合并再合并。

希尔排序,设定一个增量值,该增量值值确定了每次要比较元素之间的索引差,最后一个索引差必须为1。一般增量值设定成数组长度的一半,一半的一半。通过比较数组第0个元素和数组第0+增量值个元素大小后排序,然后第1个…之后比较另一个增量值,知道最后全部排序成功。

堆排序,堆排序在堆那一节详细说明了,其实就是用堆的特性来完成排序,每次添加都维持堆的特性添加元素,然后在提取的时候,每次提取提取的都是最大值。

所有排序算法汇总,冒泡,选择,插入,快速,优化快速,归并,希尔,堆排序

标签:通过   必须   遍历   假设   hellip   for   之间   个数   归并排序   

原文地址:https://www.cnblogs.com/chenyoude/p/9901074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!