冒泡排序
冒泡排序(Bubble Sort) 最为简单的一种排序,通过重复走完数组的所有元素,通过打擂台的方式两个两个比较,直到没有数可以交换的时候结束这个数,再到下个数,直到整个数组排好顺序。因一个个浮出所以叫冒泡排序。双重循环时间 O(n^2)
算法描述
- 比较相邻两个数据如果。第一个比第二个大,就交换两个数
- 对每一个相邻的数做同样1的工作,这样从开始一队到结尾一队在最后的数就是最大的数。
- 针对所有元素上面的操作,除了最后一个。
- 重复1~3步骤,直到顺序完成。
算法可视化
实现代码
算法实现Bubble.java
package sort.bubble;
import sort.utils.SortUtils;
/**
* 冒泡排序
* 英文名称: Bubble
* @author: liuxiangyu
* @date: 2020/7/30 00:17
*/
public class Bubble {
public static void main(String[] args) {
// 获取随机数组
int[] array = SortUtils.getArray(10000);
long startTime = System.currentTimeMillis();
for (int i = array.length - 1; i > 0; i--) {
boolean didSwap = false;
for (int j = 0; j < i; j++) {
if (array[j] > array[j + 1]) {
SortUtils.exchange(array, j, j + 1);
didSwap = true;
}
}
if (!didSwap){
break;
}
}
long endTime = System.currentTimeMillis();
SortUtils.printlnArray(array);
System.err.println("数组长度:" + array.length + " 用时:" + (endTime - startTime) +"毫秒");
}
}
工具类 SortUtils.java
package sort.utils;
/**
* @author: liuxiangyu
* @date: 2020/7/29 00:02
*/
public class SortUtils {
/**
* 获取一个随机数组
* @return
*/
public static int[] getArray(int num){
int[] intArray = new int[num];
for (int i = 0; i < num; i++) {
intArray[i] = new Double(Math.random()*num * 10).intValue();
//intArray[i] = i;
}
return intArray;
}
/**
* 打印数组
* @param intArray
*/
public static void printlnArray(int[] intArray){
for (Integer integer : intArray) {
System.err.print(integer +" ");
}
System.err.println();
}
/**
* 交换数组两个位置的值
* @param array
* @param i
* @param j
*/
public static void exchange(int[] array,int i,int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
阿里云服务器1折起:https://www.aliyun.com/minisite/goods?userCode=x4mpoaxe