首页 > 代码库 > 冒泡排序
冒泡排序
冒泡排序(下沉排序):因为较小的值逐渐想数组顶部(即第一个元素)冒上来,就像水中的水泡一样,而同时,较大的值会沉入数组底部。
实现:使用嵌套的循环对整个数组进行数次遍历,每次遍历都要比较数组中相邻的两个元素,如果前者大于后者,交换位置,否则,不变。
代码:
private static void fun(int[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length-1; j++) {
if(a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
性能分析:
本代码,不论数据的初始状态是什么,它的时间复杂度都是 O(n*n)
优化:冒泡算法的结束时机除了执行完所有的循环,还有当执行一次排序过程没有发生元素交换。
private static void fun(int[] a) {
for (int i = 0; i < a.length-1; i++) {
boolean flag = false;//设置一个标识符,来表示当前的依次排序过程有没有发生元素交换
for (int j = 0; j < a.length-1; j++) {
if(a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = true;//发生元素交换,将表是否置为true
}
}
if(!flag){//如果没有发生元素交换则结束
return ;
}
}
}
优化后性能:
最坏情况还是O(n*n)
最好情况 O(n)
冒泡排序