快排,取基准元素(一般为数组第一个元素),同时从右、左向中间与基准元素比较,如果右边元素小于基准元素,则将该元素调到左边,如果左边元素大于基准元素,则将该元素调到右边,直至左右下标重叠,此时回填基准元素,满足该基准元素左边数组小于该值,右边数组大于该值。
//快排 public static void quickSort(int[] array,int low,int height){ if(low > height){ return; } int i = low; int j = height; int base = array[i];//基准元素 while(i < j){ while(i < j && base < array[j]){ j--; } if(i < j){//此时,右边元素小于基准元素,将该值调往左边 array[i++] = array[j]; } while(i < j && base > array[i]){ i++; } if(i < j){//此时,左边元素大于基准元素,将该值调往右边 array[j--] = array[i]; } } array[i] = base; quickSort(array,low,i-1);//递归排序左边数组 quickSort(array,i+1,height);//递归排序右边数组 }
|