首页 > 代码库 > 快速排序与归并排序

快速排序与归并排序

实现原理:

  1. 快速排序:关键点是从队列中任意取出一个值,将其放在正确的位置(左边小于等于此数,右边大于等于此数),确定每个数自己的位置以后队列便是从小大大依次排序。
  2. 归并排序:先将队列拆封成两更小的队列,小队列依次排序,让后再将小队列合并,并确保顺序。

代码:

 1 public class test { 2     public static void main(String args[]) { 3         int[] aa = { 4, 5, 2, 7, 8, 2, 1, 6, 4, 4, 3 }; 4         //quicksort(aa, 0, aa.length - 1); 5         mergesort(aa, 0, aa.length - 1); 6         for (int i : aa) { 7             System.out.print(i + " "); 8         } 9     }10 11     /**12      * 快速排序13      * 14      * @param aa15      * @param begin16      * @param end17      */18     public static void quicksort(int[] aa, int begin, int end) {19         if (begin < end) {20             int b = begin;21             int e = end;22             int base = aa[begin];23             while (b < e) {24                 while (b < e && aa[e] >= base)25                     e--;26                 aa[b] = aa[e];27                 while (b < e && aa[b] <= base)28                     b++;29                 aa[e] = aa[b];30             };31             //b与e相等,任意取一个32             aa[b] = base;33             quicksort(aa, begin, b - 1);34             quicksort(aa, b + 1, end);35         }36     }37 38     /**39      * 归并排序40      * 41      * @param aa42      * @param begin43      * @param end44      */45     public static void mergesort(int[] aa, int begin, int end) {46         if (begin < end) {47             int middle = (begin + end) / 2;48             mergesort(aa, begin, middle);49             mergesort(aa, middle + 1, end);50             int[] tmpArr = new int[aa.length];51             int mid = middle + 1; // 右边的起始位置52             int tmp = begin;53             int third = begin;54             while (begin <= middle && mid <= end) {55                 // 从两个数组中选取较小的数放入中间数组56                 if (aa[begin] <= aa[mid]) {57                     tmpArr[third++] = aa[begin++];58                 } else {59                     tmpArr[third++] = aa[mid++];60                 }61             }62             // 将剩余的部分放入中间数组63             while (begin <= middle) {64                 tmpArr[third++] = aa[begin++];65             }66             while (mid <= end) {67                 tmpArr[third++] = aa[mid++];68             }69             // 将中间数组复制回原数组70             while (tmp <= end) {71                 aa[tmp] = tmpArr[tmp++];72             }73         }74     }75 }

 

快速排序与归并排序