快速排序

package com.spring.dao;

public class Test3 {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  int []str = {12,76,18,35,43,15,38,2,32,65,23,72,0,64,16,678};
  QuickSort(str,0,str.length-1);
  for(int i = 0 ; i < str.length ; i ++){
   System.out.print(str[i]+" ");
  }
 }
 public static void QuickSort(int[] pData,int left, int right) {
  int i, j; //获取当前需要排序数组的起始与结束下标
  int middle; //标记值,用于定位中心点
  int strTemp;//局部存储变量
  i = left;
  j = right;
  middle = pData[(left + right) / 2];//获取标记值
  do {
   while ((pData[i] < middle) && (i < right))i++; //独立循环获取中心值左边,所有值中小于中心值的下标。
   while ((pData[j] > middle) && (j > left))j--; //独立循环获取中心值右边,所有值中大于中心值的下标。
   if (i <= j){//将中心值左边大于中心值数值的数 与 中心值右边小于中心值 的值,调换位置。
    strTemp = pData[i];
    pData[i] = pData[j];
    pData[j] = strTemp;
    i++;
    j--;
   }
  } while (i <= j); //直至中心值左右两端下标重叠。侧停止,完成第一次遍历
  //注意此时的I,J值,将当前数组已中心值拆分,递归调用。
  if (left < j) //将拆分的左边数组重新进行排序
   QuickSort(pData, left, j);
  if (right > i) //将拆分的右边数组重新进行排序
   QuickSort(pData, i, right);
 }

}


原文链接: http://www.dlog.cn/nicholascoder/diary/35638878

你可能感兴趣的:(快速排序)