java快排(兩種方法)
阿新 • • 發佈:2017-12-22
span ast [] ati pub 方法 color 整體 blog
快排是最基礎的排序算法之一,今天來回顧一下。
public class QuickSort { public static void quickSort(int[] array){ if(array != null){ quickSort(array, 0, array.length-1); } } private static void quickSort(int[] array,int beg,int end){ if(beg >= end || array == null) return; int p = partition(array, beg, end); quickSort(array, beg, p-1); quickSort(array, p+1, end); } }
以上就是快排的整體框架,最重要的就是partition方法,它是劃分並找到下次分割排序的位置P常用的方法
private static int partition(int[] array, int beg, int end) { int first = array[beg];int i = beg, j = end; while (i < j) { while (array[i] <= first && i < end) { i++; } while (array[j] > first && j >= beg) { j--; } if (i < j) { array[i]= array[i] ^ array[j]; array[j] = array[i] ^ array[j]; array[i] = array[i] ^ array[j]; } } if (j != beg) { array[j] = array[beg] ^ array[j]; array[beg] = array[beg] ^ array[j]; array[j] = array[beg] ^ array[j]; } return j; }
第二種partition方法實現:
private static int partition(int[] array,int beg,int end){ int last = array[end]; int i = beg - 1; for(int j = beg;j<=end-1;j++){ if(array[j]<=last){ i++; if(i!=j){ array[i]=array[i]^array[j]; array[j]=array[i]^array[j]; array[i]=array[i]^array[j]; } } } if((i+1)!=end){ array[i+1] = array[i+1]^array[end]; array[end] = array[i+1]^array[end]; array[i+1] = array[i+1]^array[end]; } return i+1; }
java快排(兩種方法)