冒泡排序:顾名思义就像是在水中冒泡,较大的数沉下去,较小的数慢慢冒起来。
冒泡排序算法的原理如下:
1:比较相邻的元素,如果第一个比第二个大,就交易换他们两个。
2:对每一对相邻的元素做同样的工作,从开始第一对到结尾的最后一对,在这一点,最后的元素该会是最大的数。
3:针对所有的元素重复以上的步骤,除了最后一个。
4:持续每次对越来越小的元素重复上面的步骤,直到没有任何一对数字需要比较。
Java 代码
public class BubbleSortTest {
/**
* 冒泡排序
*
* @param args
*/
public static void main(String[] args) {
int[] arr = {100, 1, 3, 23, 4, 6, 7, 8, 89, 12, 43, 54};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
//打印循环的次数
System.out.println(i);
}
System.out.println("");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
}
}
输出的结果:
数据顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,其实后面的比较没有意义了。
改:
public class BubbleSortTest {
/**
* 冒泡排序
*
* @param args
*/
public static void main(String[] args) {
int[] arr = {100, 1, 3, 23, 4, 6, 7, 8, 89, 12, 43, 54};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
for (int i = 0; i < arr.length - 1; i++) {
//设置标志位
boolean bool = false;
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
bool = true;
}
}
System.out.println(i);
//不需要排序的直接跳出循环
if (!bool) {
break;
}
}
//打印循环的次数
System.out.println("");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
}
}
输出结果:
是不是循环的次数变的很少了。