排序算法——冒泡算法改进版
在之前的文章:排序算法——冒泡排序 中,我们描述了传统冒泡排序的过程及其实现,那么,有没有可以改进的地方呢,肯定是有的。假如在数组本身就已经排序好的情况下,或者经过一定的循环之后数组已经被排好了,此时接下来的循环就是在浪费时间,那么如何去解决过程这里引入一个变量isChange记录是否发生交换,如果未发生交换,说明数组已经被排好,此时即可结束循环。具体实现过程看下面代码,理解起来并不难。Ja...
在之前的文章:排序算法——冒泡排序 中,我们描述了传统冒泡排序的过程及其实现,那么,有没有可以改进的地方呢,肯定是有的。假如在数组本身就已经排序好的情况下,或者经过一定的循环之后数组已经被排好了,此时接下来的循环就是在浪费时间,那么如何去解决过程这里引入一个变量isChange记录是否发生交换,如果未发生交换,说明数组已经被排好,此时即可结束循环。具体实现过程看下面代码,理解起来并不难。Ja...
介绍归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn),1945年由冯·诺伊曼首次提出。归并排序算法主要依赖归并(Merge)操作。归并操作指的是将两个已经排序的序列合并成一个序列的操作。本文主要介绍递归法。时间复杂度:最好情况:O(nlogn)平均情况:O(nlogn)最坏情况:O(nlogn)稳定性:稳定额外的空间:O(n)过程递归操作将待排序元素分为大致相同的两个子...
介绍快速排序是由东尼·霍尔所发展的一种排序算法,该算法采用了“分治思想”,同时快速排序由于排序效率在同为O(n*logn)的几种排序方法中效率较高,因此经常被采用。时间复杂度:最好情况:O(nlogn)平均情况:O(nlogn)最坏情况:O(n^2)稳定性:不稳定(不稳定发生在基准元素flag与arr[index+1]交换时)额外的空间:O(logn)~O(n)过程从序列中将某一个元素(通常...
介绍插入排序是一种简单直观的排序算法,其工作原理类似于人们对扑克牌的排序。时间复杂度:最好情况:O(n)平均情况:O(n^2)最坏情况:O(n^2)稳定性:稳定额外的空间:O(1)过程将第一个元素认定为已经被排序从第二个元素开始,取出元素,将取出的元素由后向前与其前面的元素进行比较若取出元素小于该元素,则继续向前扫描,直到取出元素小于或等于该元素将取出元素插在该元素后面重复步骤2~4直至所有...
介绍选择排序和冒泡排序的算法其实都比较好理解,都是从大到小(从小到大)操作的排序,冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。时间复杂度:最好情况:O(n^2)平均情况:O(n^2)最坏情况:O(n^2)稳定性:不稳定额外的空间:O(...