顺便复习了下部分排序
这两天趁复习算法之际,顺便实现了下插入、合并、堆和快速排序。不解释,贴点代码算是给自己留下备日后复习。
?
if( p < r ){int q = partition(a, p, r);quickSort(a,p,q-1);quickSort(a,q+1,r);}}@SuppressWarnings("unchecked")public static <T extends Comparable<?>> int partition(T[] a, int p, int r){T x = a[r];/** * i 用来指明当前比a[r]小得区域,初始状态该区域为空,所以置初始值 i = p - 1 * j 用来指示当前扫描到的元素,从p开始扫描,初始值 j = p * 当发现a[j]比a[r]小或等,则把a[j]放到i指示的区域:很简单,先i自增即找到大于a[r]的区域中第一个元素,然后交换a[i]和a[p],做完以后,i的区域增加了一个小于a[r]的元素 * 最后,a[i+1]即位x的位置 */int i = p - 1;for(int j = p; j < r; ++j){if(((Comparable)a[j]).compareTo(x) <= 0){HeapSortor.swap(a, ++i, j);}}HeapSortor.swap(a,i+1,r);return i+1;}??