冒泡排序

313 阅读2分钟

冒泡排序

前言

冒泡排序是一种交换类型的排序,两两比较是否符合排序次序。不符合则交换直到整个数组满足次序。

思想

重复的走序列的每个元素,两两比较,顺序错误则交换。每次循环确定一个最大值或者最小值,然后开启下次循环,确定第2个元素、第3个元素...第n个... 直到整个数组有序

代码

public static void bubbleSort(int []arr){
    //外层循环控制循环总趟数,没次确定一个元素有序
    for(int i=0;i<arr.length;i++){
   	 //内层循环控制比较次数,已经有序的可以不需要在做比较所以总比较次数arr.length-i-1
   	 for(int j=0;j<arr.length-i-1;j++){
   		 if(arr[j]>arr[j+1]){
   			 int temp=arr[j];
   			 arr[j]=arr[j+1];
   			 arr[j+1]=temp;
   		 }
   	 }
    }
    //打印排序后的数组
    for(int k=0;k<arr.length;k++){
   	 System.out.println(arr[k]);
    }
}

复杂度分析

算法性能

时间复杂度 科普怎么求时间复杂度 1.找出算法中的基本语句 2.计算基本语句执行次数的数量级。 以冒泡为例假如是最坏情况下: 外层循环执行次数n 内层第1次执行了n-1次 内层第2次执行了n-2次 ... 内层第n-1次执行了1次 内层最多执行n-1次最少执行1次平均次数n/2次 因而时间循环复杂度n*n/2约是O(n^2) 最坏情况下是完全有序时间复杂度是O(n)但是只适用优化后的冒泡排序

稳定性分析

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

更多推荐

快速排序详解

堆排序详解

选择排序详解

插入排序详解

归并排序详解