算法分析
阎八一
这个作者很懒,什么都没留下…
展开
-
【Java排序算法】冒泡排序及优化
冒牌排序: 从数组开始元素向后两两比较,将大值向后移动。第一遍就会把最大值移动到数组最后,如此往复达到排序目的。复杂度分析: 比较次数n*(n-1)/2 次 时间复杂度:O(n^2)普通冒泡排序:public static int[] BubbleSort1(int arr[],int len){ for (int i = ...原创 2019-07-30 21:57:53 · 185 阅读 · 0 评论 -
【java排序算法】堆排序,桶排序,计数排序
桶排序* 在额外空间充足的情况下,尽量增大桶的数量,极限情况下每个桶只有一个数据时,或者是每只桶只装一个值时,* 完全避开了桶内排序的操作,桶排序的最好时间复杂度就能够达到 O(n)。//桶排序/*比如高考总分 750 分,全国几百万人,我们只需要创建 751 个桶,循环一遍挨个扔进去,排序速度是毫秒级。但是如果数据经过桶的划分之后,桶与桶的数据分布极不均匀,有些数据非常多...转载 2019-08-03 15:10:00 · 311 阅读 · 0 评论 -
【java排序算法】选择排序及优化
选择排序: 第一轮用第一个元素与后面的所有元素比较找到最小的那一个与第一个元素交换位置,如果没找到则不交换。第二轮用第二个元素进行类似第一轮的操作,如此类推。复杂度分析: 与冒泡排序一样,但是交换次数少于冒泡排序。 比较次数n*(n-1)/2 次 时间复杂度:O(n^2)选择排序代码: public static int...原创 2019-07-30 22:27:12 · 357 阅读 · 0 评论 -
【java排序算法】插入排序及优化
插入排序: 稳定的排序算法。插入排序相当于从第一个元素开始,将后面的元素一个个往进插,新插的元素一个一个与前面的比较,遇到比自己大的交换,遇到比自己小的则插入这个位置。所以左边的元素永远是有序的。 适用于小规模数据或者大片有序的数组。复杂度分析: 时间复杂度:最坏: O(n^2) 最好:O(n)插入排序代码: ...原创 2019-07-30 23:15:35 · 523 阅读 · 0 评论 -
【java排序算法】希尔排序
希尔排序: shellSort是对插入排序的优化,是不稳定的。 比较指定步长的数组下标的值,进行插入排序,然后缩小步长,再进行插入排序,以此类推,直到步长为1。复杂度分析: 最优时间复杂度:根据步长序列的不同而不同 最坏时间复杂度:O(n^2)希尔排序代码:public static in...原创 2019-07-31 11:56:12 · 105 阅读 · 0 评论 -
【Java排序算法】归并排序
归并排序: 利用分治思想,将一个数组的排序划分成两个数组的排序,再将两个化成八个,直到划分到最小单位,然后在按序合并的过程就是归并排序。复杂度分析: 时间复杂度O(nlogn)归并排序代码:public static void merge(int []a,int left,int mid,int right){ int []tmp=ne...原创 2019-08-02 14:03:15 · 133 阅读 · 0 评论 -
【Java排序算法】快速排序
快速排序: 是不稳定的。是对冒泡排序的升华。利用分治思想,从两头遍历数组,先让右指针从右往左搜索直到找到比左指针小的元素,然后交换他俩的位置,接着让左指针从左向右搜索直到找到比右指针大的元素,然后交换他俩的位置,以此类推 直到左右指针相遇结束第一轮。紧接着将数组以左右指针相遇的那个点分开,分为左右两部分,再将这两部分做上述处理。复杂度分析: 时间复杂度...原创 2019-08-02 14:52:52 · 148 阅读 · 0 评论