标签:
---恢复内容开始---
从开始准备学编程就一直听算法算法。算法个毛东西?今天开始我就开始准备接触算法
算法那么首先就是排序:
排序大概份四种排序:
交换排序: 包括冒泡排序,快速排序。
选择排序: 包括直接选择排序,堆排序。
插入排序: 包括直接插入排序,希尔排序。
合并排序: 合并排序。
1.冒泡
从最开始的冒泡算法开始。
何为冒泡
---恢复内容结束---
从开始准备学编程就一直听算法算法。算法个毛东西?今天开始我就开始准备接触算法
算法那么首先就是排序:
排序大概份四种排序:
交换排序: 包括冒泡排序,快速排序。
选择排序: 包括直接选择排序,堆排序。
插入排序: 包括直接插入排序,希尔排序。
合并排序: 合并排序。
1.冒泡
从最开始的冒泡算法开始。
何为冒泡 好比一个
50
80
90
20
从底层开始算起冒泡,20小于90,20冒泡上来,90沉下去 50,80,20,90
20小于80 重复 50,20,80,90
90大于80,不需要交换,20小于50交换:20,50,80,90
排序成功
java代码实现:
运算时间:725ms
Array.sort();
自带数组排序算法:7ms巨大的差距
冒泡算法被打爆的体无完肤
快速排序:
快速排序也是一种交换算法,那么快速排序算法怎么会这么快呢?
left指针 right指针 base参照数字
思想就是通过第一遍等的遍历找到切割点,
第一步:取出参照数20
第二步:从右往左找一直找到比20小的数然后把这个数字赋值给left
此时数组为:10,40,50,10,60,
第三步:从数组的左开始找一直找到比20大的数40 赋值到right
此时数组为:10,40,50,40,60,
left和right指针分别为前后的40。
第四步:重复“第二,第三“步骤,直到left和right指针重合,
最后将(base)插入到40的位置,
此时数组值为: 10,20,50,40,60,至此完成一次排序。
第五步:此时20已经潜入到数组的内部,20的左侧一组数都比20小,20的右侧作为一组数都比20大,
以20为切入点对左右两边数按照"第一,第二,第三,第四"步骤进行,最终快排大功告成。
下面是自己实现的快速排序算法的实现:
时间大概是5ms左右跟java封装的排序算法差不多效率。
标签:
原文地址:http://www.cnblogs.com/wuwulalala/p/4581800.html