黑马程序员技术交流社区

标题: 数组排序之冒泡排序 [打印本页]

作者: 大牛1    时间: 2016-6-1 20:25
标题: 数组排序之冒泡排序
数组排序之冒泡排序
  1. package cn.itcast_01;

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

  12.                 /*
  13.                 // 第一次比较
  14.                 // arr.length - 1是为了防止数据越界
  15.                 // arr.length - 1 - 0是为了减少比较的次数
  16.                 for (int x = 0; x < arr.length - 1 - 0; x++) {
  17.                         if (arr[x] > arr[x + 1]) {
  18.                                 int temp = arr[x];
  19.                                 arr[x] = arr[x + 1];
  20.                                 arr[x + 1] = temp;
  21.                         }
  22.                 }
  23.                 System.out.println("第一次比较后:");
  24.                 printArray(arr);

  25.                 // 第二次比较
  26.                 // arr.length - 1是为了防止数据越界
  27.                 // arr.length - 1 - 1是为了减少比较的次数
  28.                 for (int x = 0; x < arr.length - 1 - 1; x++) {
  29.                         if (arr[x] > arr[x + 1]) {
  30.                                 int temp = arr[x];
  31.                                 arr[x] = arr[x + 1];
  32.                                 arr[x + 1] = temp;
  33.                         }
  34.                 }
  35.                 System.out.println("第二次比较后:");
  36.                 printArray(arr);

  37.                 // 第三次比较
  38.                 // arr.length - 1是为了防止数据越界
  39.                 // arr.length - 1 - 2是为了减少比较的次数
  40.                 for (int x = 0; x < arr.length - 1 - 2; x++) {
  41.                         if (arr[x] > arr[x + 1]) {
  42.                                 int temp = arr[x];
  43.                                 arr[x] = arr[x + 1];
  44.                                 arr[x + 1] = temp;
  45.                         }
  46.                 }
  47.                 System.out.println("第三次比较后:");
  48.                 printArray(arr);

  49.                 // 第四次比较
  50.                 // arr.length - 1是为了防止数据越界
  51.                 // arr.length - 1 - 3是为了减少比较的次数
  52.                 for (int x = 0; x < arr.length - 1 - 3; x++) {
  53.                         if (arr[x] > arr[x + 1]) {
  54.                                 int temp = arr[x];
  55.                                 arr[x] = arr[x + 1];
  56.                                 arr[x + 1] = temp;
  57.                         }
  58.                 }
  59.                 System.out.println("第四次比较后:");
  60.                 printArray(arr);
  61.                 */

  62.                 // 既然听懂了,那么上面的代码就是排序代码
  63.                 // 而上面的代码重复度太高了,所以用循环改进
  64.                 // for (int y = 0; y < 4; y++) {
  65.                 // for (int x = 0; x < arr.length - 1 - y; x++) {
  66.                 // if (arr[x] > arr[x + 1]) {
  67.                 // int temp = arr[x];
  68.                 // arr[x] = arr[x + 1];
  69.                 // arr[x + 1] = temp;
  70.                 // }
  71.                 // }
  72.                 // }

  73.                 /*
  74.                 // 由于我们知道比较的次数是数组长度-1次,所以改进最终版程序
  75.                 for (int x = 0; x < arr.length - 1; x++) {
  76.                         for (int y = 0; y < arr.length - 1 - x; y++) {
  77.                                 if (arr[y] > arr[y + 1]) {
  78.                                         int temp = arr[y];
  79.                                         arr[y] = arr[y + 1];
  80.                                         arr[y + 1] = temp;
  81.                                 }
  82.                         }
  83.                 }
  84.                 System.out.println("排序后:");
  85.                 printArray(arr);
  86.                 */
  87.                
  88.                 //由于我可能有多个数组要排序,所以我要写成方法
  89.                 bubbleSort(arr);
  90.                 System.out.println("排序后:");
  91.                 printArray(arr);
  92.         }
  93.        
  94.         //冒泡排序代码
  95.         public static void bubbleSort(int[] arr){
  96.                 for (int x = 0; x < arr.length - 1; x++) {
  97.                         for (int y = 0; y < arr.length - 1 - x; y++) {
  98.                                 if (arr[y] > arr[y + 1]) {
  99.                                         int temp = arr[y];
  100.                                         arr[y] = arr[y + 1];
  101.                                         arr[y + 1] = temp;
  102.                                 }
  103.                         }
  104.                 }
  105.         }

  106.         // 遍历功能
  107.         public static void printArray(int[] arr) {
  108.                 System.out.print("[");
  109.                 for (int x = 0; x < arr.length; x++) {
  110.                         if (x == arr.length - 1) {
  111.                                 System.out.print(arr[x]);
  112.                         } else {
  113.                                 System.out.print(arr[x] + ", ");
  114.                         }
  115.                 }
  116.                 System.out.println("]");
  117.         }
  118. }
复制代码








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2