基本排序之冒泡排序
Posted QAQqinlin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本排序之冒泡排序相关的知识,希望对你有一定的参考价值。
原理
重复地走访过要排序的元素列,依次比较两个相邻元素的大小,如果他们的顺序错误就把他们交换过来,重复地进行交换直到没有相邻元素需要交换,也就是说该元素已经排序完成。这个就好比水中的气泡一样,也来越大,所以人们把这种算法称之为“冒泡排序”。
简而言之,相邻两个数字进行比较大小,将值大的放在右边
第一躺排序之后,最后一个元素一定为该数组中最大的数字
第二趟排序之后,倒数第二个元素一定为该数组中的第二大数字
……
最后,数组第一个元素为最小的元素,排序结束
实现方式
用两个循环进行实现,比较大小主要在内层循环进行,外层循环在内层循环结束后才++减少排序趟数,两个循环就相当于c语言中的两个指针一样,讲了这么多,估计也看烦了,直接上代码吧!
代码段
public class BubbblingSort { public static void solution(int[]a,int length){ for(int i=0;i<length-1;i++){ //外层循环,控制排序趟数 for(int j=0;j<length-1-i;j++){ //内层循环,依次比较两个元素,较大的则往后移 if(a[j]>a[j+1]){ int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } public static void main(String[] args) { int[]a={6,5,9,4,3,2,7}; int len=a.length; solution(a,len); for(int i=0;i<a.length;i++){ System.out.print(a[i]); } } }
冒泡排序的时间复杂度
复杂度是根据for循环来进行计算的,
由上图代码可以看出,外层循环会执行N次,内层循环执行N-1次,所以复杂度为:O(n^2)
冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值,思路简单,很容易理解,
1.如果数据为正序,只需要走一趟即可完成排序,此时的比较次数N-1和记录移动次数0均达到最小值,所以,冒泡排序最好的时间复杂度为O(n)。
2.如果数据为反序,则需要进行n-1趟排序,每趟排序要进行n-i次比较(1≤i≤n-1),在这种情况下,冒泡排序最坏的时间复杂度为O(n^2)
以上是关于基本排序之冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章