java排序算法

public class SortUtil {
 /**
  * 冒泡排序<br/>
  *
  * @param a
  */
 public static void maopaoSort(int[] a) {
    for (int i = a.length - 1; i >= 0; i--) {
       for (int j = 0; j < i; j++) {
          if (a[j] > a[j + 1]) {
             int tmp = a[j];
             a[j] = a[j + 1];
             a[j + 1] = tmp;
          }
       }
    }
 }

 /**
  * 插入排序<br/>
  * <ul>
  * <li>从第一个元素开始,该元素可以认为已经被排序</li>
  * <li>取出下一个元素,在已经排序的元素序列中从后向前扫描</li>
  * <li>如果该元素(已排序)大于新元素,将该元素移到下一位置</li>
  * <li>重复步骤3,直到找到已排序的元素小于或者等于新元素的位置</li>
  * <li>将新元素插入到该位置中</li>
  * <li>重复步骤2</li>
  * </ul>
  *
  * @param a
  */
 public static void insertSort(int[] a) {
    for (int i = 1; i < a.length; i++) {
       int tmp = a[i];
       int j;
       for (j = i; j > 0 && tmp < a[j - 1]; j--) {
          a[j] = a[j - 1];
       }
       a[j] = tmp;
    }
 }

 /**
  * 快速排序<br/>
  * <ul>
  * <li>取第一个元素作为key</li>
  * <li>从后向前扫描序列,直到找到比当前key小的值,并做交换</li>
  * <li>从前向后扫描序列,直到找到比当前key大的值,并做交换,并记录当前位置(此时左边<key<右边)</li>
  * <li>以key位置分成2个数组,重复123</li>
  * <li>当每个数组剩余1个元素时,序列已经排好序</li>
  * </ul>
  *
  * @param a
  */
 public static void quickSort(int[] a) {
    qsort(a, 0, a.length - 1);
 }

 private static void qsort(int[] a, int left, int right) {
    if (left < right) {
       int p = get(a, left, right);
       qsort(a, left, p - 1);
       qsort(a, p + 1, right);
    }
 }

 private static int get(int[] a, int left, int right) {
    int key = a[left];
    while (left < right) {
       while (left < right && a[right] >= key) {
          right--;
       }
       int tmp = a[left];
       a[left] = a[right];
       a[right] = tmp;
       while (left < right && a[left] <= key) {
          left++;
       }
       int tmp2 = a[left];
       a[left] = a[right];
       a[right] = tmp2;
    }
    return left;
 }

 /**
  * 选择排序<br/>
  * <ul>
  * <li>默认第一个元素为排好序的元素</li>
  * <li>从第二个元素开始,将元素插入到前面已经排好序的数组中</li>
  * </ul>
  *
  * @param a
  */
 public static void selectSort(int[] a) {
    for (int i = 0; i < a.length; i++) {
       int low = i;
       for (int j = i + 1; j < a.length; j++) {
          if (a[j] < a[low]) {
             low = j;
          }
       }
       int tmp = a[i];
       a[i] = a[low];
       a[low] = tmp;
    }
 }

  }
wyong wechat
欢迎关注,不定期推送任意内容。
您的支持将鼓励我继续创作!