/*
* 基本思路:对未排序的各元素从头到尾以此比较相邻的2个元素大小关系,若于则交换位置,
* 经过第一轮比较排序后可以得出最大值,然后使用同样的方法把剩下的元素逐个比较即可。
* 可以看出有n个元素,那么一共要进行n-1轮比较.(若6个元素,要进行6-1轮比较,第一轮比较6-1次,第三轮比较6-3次)
*/
/* 若有下列int类型数组需要排序: */
int[] arr = { 414, 35452, 615, 12, 116, 6334 };
System.out.print("冒泡排序前:");
Test.println(arr); //打印
// 比较大小 compare
Test.compare(arr);
System.out.print("冒泡排序后:");
Test.println(arr);
}
public static void compare(int[] arr) {
//冒泡排序
//从第一个开始 , 数组循环完结束
for (int i = 1; i <= arr.length; i++) {
//循环第一个i, arr.length - i:每次循环减去对应的循环次数.
for (int ii = 1; ii <= arr.length - i; ii++) {
//如果每次的arr[0]>第二个比较的数值 就替换位置
if (arr[ii - 1] > arr[ii]) {
Test.swap(arr, ii - 1, ii);
// 数组,当前坐标,循环坐标
}
}
}
/*思路
//第一轮比较
// 从1开始 ,每比一次需要再数组长度上-1
for (int i = 1; i <= arr.length - 1; i++) {
//每次比较都从第一个开始比较,
if (arr[i - 1] > arr[i]) {
//如果每次的arr[0]>第二个比较的数值 就替换位置
Test.swap(arr, i - 1, i);
}
}
//第二轮比较
// 从1开始 ,每比一次需要再数组长度上-2
for (int i = 1; i <= arr.length - 2; i++) {
if (arr[i - 1] > arr[i]) {
Test.swap(arr, i - 1, i);
}
}
//第三轮比较
// 从1开始 ,每比一次需要再数组长度上-3
for (int i = 1; i <= arr.length - 3; i++) {
if (arr[i - 1] > arr[i]) {
Test.swap(arr, i - 1, i);
}
}
//第四轮比较
// 从1开始 ,每比一次需要再数组长度上-4
for (int i = 1; i <= arr.length - 4; i++) {
if (arr[i - 1] > arr[i]) {
Test.swap(arr, i - 1, i);
}
}
*/}
//如果大于,则值替换
public static void swap(int[] arr, int index1, int index2) {
int index = arr[index1];
arr[index1] = arr[index2];
arr[index2] = index;
}
// 打印美化
public static void println(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
System.out.println("]");
}