排序算法-冒泡排序BubbleSort
冒泡排序算法的原理如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
总结:从左至右,依次比较,逆序交换

时间复杂度:
最好情况:序列初始状态是正序的,扫描一趟可完成排序 故 最好时间复杂度 O (n)
最坏情况:序列初始状态是逆序的,需要进行n-1趟排序,每趟排序需要进行n-i次比较,故 最坏时间复杂度 O (n^2)
冒泡排序总的平均时间复杂度为O (n^2)
冒泡排序是稳定排序
(稳定排序:排序中相等的关键字,排序后序列号不变,称为稳定排序 比如int数组[1,1,1,6,4]中a[0],a[1],a[2]的值相等,在排序时不改变其序列,则称所用的方法是稳定的。)
伪代码:
```int[] arr={}; //给入一个数组
for(i=0;i<arr.length-1;i++) //第几轮排序
for(j=0;arr.length-1-i;j++) //第几个数据
if(a[j]<a[j+1] 或者 a[j]>a[j+1])
a[j]、a[j+1]交换
程序:
package Sort;
import java.util.Arrays;
public class BubbleSort1 {
public static void main(String[] args) {
int[] arr= {2,-1,4,3,10,2,-6,11};
System.out.println(Arrays.toString(arr));
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr){
int temp;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length -1 - i; j++) {
if(arr[j] > arr[j+1] ){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
优化程序:
假如从开始的第一对到结尾的最后一对,相邻的元素没有发生交换,意味着排序完成,可以退出。
package Sort;
import java.util.Arrays;
public class BubbleSort1 {
public static void main(String[] args) {
int[] arr= {2,-1,4,3,10,2,-6,11};
System.out.println(Arrays.toString(arr));
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr){
int temp;
boolean flag = false;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length -1 - i; j++){
if(arr[j] > arr[j+1] ){
flag = true;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
if(!flag){
break;
}else{
flag = false;
}
}
}
}
PS:正处于学习阶段的一个代码小同学,一直仰望能持续写博客的大神们,希望通过博客归纳总结所学过的东西。文章基本是对学过的看过的文章或教程的个人总结,掺杂了个人理解,不对的地方欢迎各位大佬交流指教。
作者: Youngst-爱学习的小杨同学
出处:https://www.cnblogs.com/youngst/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号