冒泡排序
Posted Aaronn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序相关的知识,希望对你有一定的参考价值。
冒泡排序(下沉排序):因为较小的值逐渐想数组顶部(即第一个元素)冒上来,就像水中的水泡一样,而同时,较大的值会沉入数组底部。
实现:使用嵌套的循环对整个数组进行数次遍历,每次遍历都要比较数组中相邻的两个元素,如果前者大于后者,交换位置,否则,不变。
代码:
private static void fun(int[] a) {
for (int i = a.length-1; i>=0 ;i--) {
for (int j = 0; j < i; 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 = a.length-1; i>=0 ;i--) {
boolean flag = false;//设置一个标识符,来表示当前的依次排序过程有没有发生元素交换
for (int j = 0; j < i; 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)
以上是关于冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章