您的位置:首页 > 编程语言

常见对象_数组高级冒泡排序原理图解、数组高级冒泡排序代码实现

2016-11-17 23:37 741 查看


package cn.itcast_01;

/*
* 数组排序之冒泡排序:
* 		相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
*/
public class ArrayDemo {
public static void main(String[] args) {
// 定义一个数组
int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:");
printArray(arr);

/*
// 第一次比较
// arr.length - 1是为了防止数据越界(数组长度-1)
// arr.length - 1 - 0是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 0; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
System.out.println("第一次比较后:");
printArray(arr);

// 第二次比较
// arr.length - 1是为了防止数据越界(数组长度-1)
// arr.length - 1 - 1是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 1; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
System.out.println("第二次比较后:");
printArray(arr);

// 第三次比较
// arr.length - 1是为了防止数据越界(数组长度-1)
// arr.length - 1 - 2是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 2; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
System.out.println("第三次比较后:");
printArray(arr);

// 第四次比较
// arr.length - 1是为了防止数据越界(数组长度-1)
// arr.length - 1 - 2是为了减少比较的次数
for (int x = 0; x < arr.length - 1 - 3; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
System.out.println("第四次比较后:");
printArray(arr);

// 上面的代码重复度太高了,所以用循环改进
for (int y = 0; y < 4; y++) {
for (int x = 0; x < arr.length - 1 - y; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
}
System.out.println("循环改进比较后:");
printArray(arr);
*/
/*
//由于我们知道比较的次数是数组长度-1次,所以改进最终版程序
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - 1 - x; y++) {
if (arr[y] > arr[y + 1]) {
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
System.out.println("排序后:");
printArray(arr);
*/

//由于我要可能 有多个数组要排序,所以我要写成方法
bubbleSort(arr);
System.out.println("排序后:");
printArray(arr);
}

// 冒泡排序代码
public static void bubbleSort(int[] arr){
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - 1 - x; y++) {
if (arr[y] > arr[y + 1]) {
int temp = arr[y];//arr[y]索引2,把索引2的元素80赋值给temp,temp就是80了。
arr[y] = arr[y + 1];//arr[y+1]索引是2+1=3, 把索引3的元素57赋值给索引2, 所以索引2就是元素57。
arr[y + 1] = temp;////temp数据是80,把80赋值给索引2+1=3,所以索引3的元素是80
}
}
}
}

// 遍历功能
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: