冒泡算法:
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,
这样一趟过去后,最大或最小的数字被交换到了最后一位,
然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子
例子:从小到大进行排序6 | 4 | 8 | 5 | 3 | 1 |
第一次循环比较
第一次比较:3 > 1
结果:6 | 4 | 8 | 5 | 1 | 3 |
第二次比较:5 >1
结果:6 | 4 | 8 | 1 | 5 | 3 |
第三次比较:8 >1
结果:6 | 4 | 1 | 8 | 5 | 3 |
第四次比较:4 > 1
结果:6 | 1 | 4 | 8 | 5 | 3 |
第五次比较:6 > 1
结果:1 | 6 | 4 | 8 | 5 | 3 |
此时,一次循环结束。
之后以此类推共进行n-1次循环。
代码实现:
package paixu;
public class MaoPao {
public void sort(int[] arr){
int length = arr.length;
for(int i = 0; i < length - 1; i++){
for(int j = 0; j < length - 1 - i; j ++){
if(arr[j] > arr[j+1]){
int temp;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
public static void main(String args[]){
int arr[] = {1,3,5,8,4,6};
MaoPao m = new MaoPao();
m.sort(arr);
for(int x : arr){
System.out.println(x);
}
}
}
对冒泡法的算法分析:执行了两次的循环结构,数量级是n^2,算法的时间复杂度只看T(n) = O(n^2)