Java基础知识强化52:经典排序之冒泡排序(BubbleSort)

1. 冒泡排序的原理图:

 

2. 冒泡排序代码实现:

  1 package cn.itcast_01;
  2 
  3 /*
  4  * 数组排序之冒泡排序:
  5  *         相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
  6  */
  7 public class ArrayDemo {
  8     public static void main(String[] args) {
  9         // 定义一个数组
 10         int[] arr = { 24, 69, 80, 57, 13 };
 11         System.out.println("排序前:");
 12         printArray(arr);
 13 
 14         /*
 15         // 第一次比较
 16         // arr.length - 1是为了防止数据越界
 17         // arr.length - 1 - 0是为了减少比较的次数
 18         for (int x = 0; x < arr.length - 1 - 0; x++) {
 19             if (arr[x] > arr[x + 1]) {
 20                 int temp = arr[x];
 21                 arr[x] = arr[x + 1];
 22                 arr[x + 1] = temp;
 23             }
 24         }
 25         System.out.println("第一次比较后:");
 26         printArray(arr);
 27 
 28         // 第二次比较
 29         // arr.length - 1是为了防止数据越界
 30         // arr.length - 1 - 1是为了减少比较的次数
 31         for (int x = 0; x < arr.length - 1 - 1; x++) {
 32             if (arr[x] > arr[x + 1]) {
 33                 int temp = arr[x];
 34                 arr[x] = arr[x + 1];
 35                 arr[x + 1] = temp;
 36             }
 37         }
 38         System.out.println("第二次比较后:");
 39         printArray(arr);
 40 
 41         // 第三次比较
 42         // arr.length - 1是为了防止数据越界
 43         // arr.length - 1 - 2是为了减少比较的次数
 44         for (int x = 0; x < arr.length - 1 - 2; x++) {
 45             if (arr[x] > arr[x + 1]) {
 46                 int temp = arr[x];
 47                 arr[x] = arr[x + 1];
 48                 arr[x + 1] = temp;
 49             }
 50         }
 51         System.out.println("第三次比较后:");
 52         printArray(arr);
 53 
 54         // 第四次比较
 55         // arr.length - 1是为了防止数据越界
 56         // arr.length - 1 - 3是为了减少比较的次数
 57         for (int x = 0; x < arr.length - 1 - 3; x++) {
 58             if (arr[x] > arr[x + 1]) {
 59                 int temp = arr[x];
 60                 arr[x] = arr[x + 1];
 61                 arr[x + 1] = temp;
 62             }
 63         }
 64         System.out.println("第四次比较后:");
 65         printArray(arr);
 66         */
 67 
 68         // 既然听懂了,那么上面的代码就是排序代码
 69         // 而上面的代码重复度太高了,所以用循环改进
 70         // for (int y = 0; y < 4; y++) {
 71         // for (int x = 0; x < arr.length - 1 - y; x++) {
 72         // if (arr[x] > arr[x + 1]) {
 73         // int temp = arr[x];
 74         // arr[x] = arr[x + 1];
 75         // arr[x + 1] = temp;
 76         // }
 77         // }
 78         // }
 79 
 80         /*
 81         // 由于我们知道比较的次数是数组长度-1次,所以改进最终版程序
 82         for (int x = 0; x < arr.length - 1; x++) {
 83             for (int y = 0; y < arr.length - 1 - x; y++) {
 84                 if (arr[y] > arr[y + 1]) {
 85                     int temp = arr[y];
 86                     arr[y] = arr[y + 1];
 87                     arr[y + 1] = temp;
 88                 }
 89             }
 90         }
 91         System.out.println("排序后:");
 92         printArray(arr);
 93         */
 94         
 95         //由于我可能有多个数组要排序,所以我要写成方法
 96         bubbleSort(arr);
 97         System.out.println("排序后:");
 98         printArray(arr);
 99     }
100     
101     //冒泡排序代码
102     public static void bubbleSort(int[] arr){
103         for (int x = 0; x < arr.length - 1; x++) {
104             for (int y = 0; y < arr.length - 1 - x; y++) {
105                 if (arr[y] > arr[y + 1]) {
106                     int temp = arr[y];
107                     arr[y] = arr[y + 1];
108                     arr[y + 1] = temp;
109                 }
110             }
111         }
112     }
113 
114     // 遍历功能
115     public static void printArray(int[] arr) {
116         System.out.print("[");
117         for (int x = 0; x < arr.length; x++) {
118             if (x == arr.length - 1) {
119                 System.out.print(arr[x]);
120             } else {
121                 System.out.print(arr[x] + ", ");
122             }
123         }
124         System.out.println("]");
125     }
126 }

 

posted on 2015-09-24 09:01  鸿钧老祖  阅读(255)  评论(0编辑  收藏  举报

导航