把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复,一趟排序完成,左边就是比中轴小的,右边就是比中轴大的,然后再用分治法,分别对这两个独立的数组进行排序。
package com.daqing.test; public class Sort { /** * 快速排序,对整数型数组o进行 * @param o * @param low * @param hight */ public static void quiteSort( int[] o , int low , int hight ){ if(low < hight){ int povitePosition = adjust(o,low,hight); quiteSort( o , low , povitePosition - 1); quiteSort( o , povitePosition + 1 , hight ); } } /** * 进行调整 * @param o * @param low * @param hight * @return */ private static int adjust( int[] o , int low , int hight ){//选定枢轴为low所对应的值 int pivote = o[low]; while(low < hight){ while(hight > low && compare( pivote , o[hight] ) <= 0 ){// 高位找到比povite大,则符合要求,继续寻找 hight -- ; } o[low] = o[hight] ; while(low < hight && compare( pivote , o[low] ) >= 0){ //低位开始找到比povite小,符合要求,继续寻找 low ++ ; } o[hight] = o[low]; } o[low] = pivote ; return low; } /** * * @param num1 减数 * @param num2 被减数 * @return */ private static int compare(int num1, int num2) { return num1 - num2 ; } /** * @param args */ public static void main(String[] args) { int[] i = {26,53,48,15,13,46,32,15,0}; quiteSort(i, 0, i.length-1); for(int ii:i){ System.out.print(ii+" "); } } }