/**
* 原始冒泡
* @param num
*/
public static void bubbleSortOne(int num[]) {
for (int i = 0; i < num.length; i++) {
for (int j = 1; j < num.length-i; j++) {
if (num[j-1] > num[j]) {
swap(num, j-1, j);
}
}
}
}
/**
* 冒泡优化
* 添加标志位,在不存在交换时退出循环
* 如果提前完成排序,则无需再继续循环
* @param num
*/
public static void bubbleSortTwo(int num[]) {
boolean flag = true;
int number = num.length;
while (flag) {
flag = false;
for (int i = 1; i < number; i++) {
if (num[i - 1] > num[i]) {
swap(num, i - 1, i);
flag = true;
}
}
number--;
}
}
/**
* 冒泡更优化
* flag用来记录每次for循环的最后的交换位置
* 因为可能出现数组中元素部分有序
* 所以每次循环并不是把k值减一,而是直接用最后的交换位置即可(因为后面的已经排好序)
* @param num
*/
public static void bubbleSortThree(int num[]) {
int flag = num.length;
int k;
while (flag > 0) {
k = flag;
flag = 0;
for (int i = 1; i < k; i++) {
if (num[i - 1] > num[i]) {
swap(num, i - 1, i);
flag = i;
}
}
}
}
/**
* 交换值
* @param num
* @param i
* @param j
*/
public static void swap(int num[],int i,int j) {
int temp;
temp = num[i];
num[i] = num[j];
num[j] = temp;
}