冒泡排序额思想简单来说就是:相邻两个数比较,将最大额或者最小的放在最后
下面分析一个数组[21,78,52,18,34,11]进行从大到小排序.
如下图.为第一轮比较的过程,依次比较相邻两个元素,第一轮比较完后将最大的78放在了最后
第一轮:比较了5次,交换 4次
第二轮:比较了4次,交换 3次
第三轮:比较了3次,交换 1次
第四轮:比较了2次,交换 1次
第五轮:比较了1次,交换 1次
统计:6个元素总共比较了5轮,比较了15次,交换 10次
公式:比较轮数=n-1轮,
比较次数=n*(n-1)/2次
上代码
工具类:
package com.darlingPig.utils;
/**
* 数组工具类
* @author darlingPig
* @since 2016-11-19
*
*/
public class ArrayUtils {
/**
* 冒泡排序
*
* @param arr
* @return
*/
public static int[] sort(int[] arr) {
for (int i = arr.length-1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
}
测试类:
package com.darlingPig.test;
import com.darlingPig.utils.ArrayUtils;
public class Test {
public static void main(String[] args) {
//要排序的数组
int[] arr = {12,52,78,18,34,11};
//调用工具类写好的冒泡排序方法,返回一个排好序的数组
arr = ArrayUtils.sort(arr);
//遍历数组
for (int i : arr) {
System.out.println(i);
}
}
}
转载于:https://blog.51cto.com/12258949/1874619