package sorts;

/**
 * 冒泡排序、插入排序、选择排序
 *
 * Author: Zheng
 */
public class Sorts {

  // 冒泡排序，a是数组，n表示数组大小
  public static void bubbleSort(int[] a, int n) {
    if (n <= 1) return;

    // 提前退出标志位
    boolean flag = false;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < n - i - 1; ++j) {
        if (a[j] > a[j+1]) { // 交换
          int tmp = a[j];
          a[j] = a[j+1];
          a[j+1] = tmp;
          // 此次冒泡有数据交换
          flag = true;
        }
      }
      if (!flag) break;  // 没有数据交换，提前退出
    }
  }

  // 插入排序，a表示数组，n表示数组大小
  public static void insertionSort(int[] a, int n) {
    if (n <= 1) return;

    for (int i = 1; i < n; ++i) {
      int value = a[i];
      int j = i - 1;
      // 查找要插入的位置并移动数据
      for (; j >= 0; --j) {
        if (a[j] > value) {
          a[j+1] = a[j];
        } else {
          break;
        }
      }
      a[j+1] = value;
    }
  }

  // 选择排序，a表示数组，n表示数组大小
  public static void selectionSort(int[] a, int n) {
    if (n <= 1) return;
    for (int i = 0; i < n; ++i) {
      // 查找最小值
      int minIndex = i;
      int minValue = a[i];
      for (int j = i; j < n; ++j) {
        if (a[j] < minValue) {
          minValue = a[j];
          minIndex = j;
        }
      }

      // 交换
      int tmp = a[i];
      a[i] = a[minIndex];
      a[minIndex] = tmp;
    }
  }

}

@@ -171,24 +171,60 @@
 1) return;%0A%0A
+    for (int i = 0; i %3C n; ++i) %7B%0A  
     // %E6%8F%90%E5%89%8D%E9%80%80%E5%87%BA%E6%A0%87
@@ -230,16 +230,18 @@
 %E6%A0%87%E5%BF%97%E4%BD%8D%0A    
+  
 boolean 
@@ -258,42 +258,8 @@
 se;%0A
-    for (int i = 0; i %3C n; ++i) %7B%0A
     

fix bug.