排序--冒泡排序

按照由小到大的顺序排列,冒泡排序基本步骤:算法

一、比较相邻两个数值的大小,将数值大的交换到数值小的后面,数据交换的时候须要1个临时变量空间;优化

二、对剩下的n-1个数值重复1的步骤,直到剩下的数值个数为1。blog

好比5,4,3,2,1的排序步骤以下:排序

第一遍:四、五、三、二、1;    四、三、五、二、1;    四、三、二、五、1;    四、三、二、一、5变量

第二遍:三、四、二、一、5;    三、二、四、一、5;    三、二、一、四、5lucene

第三遍:二、三、一、四、5;    二、一、三、四、5im

第四遍:一、二、三、四、5d3

时间复杂度为:数据

数据交换次数与时间复杂度同样。img

当数据自己有序时如一、二、三、四、5,能够在以上的步骤进行优化,即在第一遍过程当中发现没有数据发生交换就能够判断数据已经有序,此时的时间复杂度为N-1。当数据基本有序时如二、三、一、四、5,比较的次数永远都是上述最坏时间复杂度,可是数据交换的次数会少点。因为在绝大部分状况下,给定的数据极少是已经有序的,因此冒泡排序的平均时间复杂度是N*(N-1)/2

这里并无用大O表示法,由于在实际的排序算法中,当数据个数到必定程度时会使用其它排序算法,好比在lucene中IntroSorter下,元素个数达到20的时候用二分插入排序,至于这个20是怎么来的,我的认为只有把完整的时间复杂度公式表达出来才能求出。

冒泡排序算法是稳定的,由于当相邻的数据相同时不会发生位置交换,即便不相邻的数据相同时也不会发生位置交换。

相关文章
相关标签/搜索