当前位置: 代码迷 >> J2SE >> 一段代码 帮忙看以下 急用!解决思路
  详细解决方案

一段代码 帮忙看以下 急用!解决思路

热度:219   发布时间:2016-04-24 16:33:44.0
一段代码 帮忙看以下 急用!
有关排序的,String[]   pData   这个什么用啊?
void   QuickSort(String[]   pData,int[]   pDataNum,int   left,int   right){  
int   i,j;
int   iTemp;
String   middle,strTemp;
i   =   left;
j   =   right;
middle   =   pData[(left+right)/2];
do{  
while((pData[i].compareTo(middle) <0)   &&   (i <right))  
i++;  
while((pData[j].compareTo(middle))> 0   &&   (j> left))  
j--;
if(i <=j){
strTemp   =   pData[i];
pData[i]   =   pData[j];
pData[j]   =   strTemp;

iTemp   =   pDataNum[i];
pDataNum[i]   =   pDataNum[j];
pDataNum[j]   =   iTemp;

i++;
j--;
}  
}while(i <=j);//如果两边扫描的下标交错,就停止(完成一次)  

if(left <j)  
QuickSort(pData,pDataNum,left,j);  

if(right> i)  
QuickSort(pData,pDataNum,i,right);  
}

------解决方案--------------------
/*
* 快速排序算法
*
* @param pData :要排序的数组
* @param pDataNum :要排序的数组
* @param left :要排序数组的开始左下标
* @param right :要排序数组的开始右下标
*
* @return null
*
* @throws Exception null
*/

void QuickSort(String[] pData, int[] pDataNum, int left, int right) {
int i,j; //排序数组的左、右下标
int iTemp; //临时存储下标值对应是数据值的变量
String middle,strTemp; //
i = left;
j = right;
middle = pData[(left+right)/2]; //中间位置的数据值

//按中间值将带排序的数组,所有小于中间值的放在左边,所有大与中间值的放右边
do{
//取左边的第i(且不是最后一个)个元素与中间元素比较,即取值大于中间值的左下标(交换)
while((pData[i].compareTo(middle) < 0) && (i < right))
i++;

//取右边的第J(且不是第一个)个元素与中间元素比较,即取值小于中间值的右下标(交换)
while((pData[j].compareTo(middle)) > 0 && (j > left))
j--;

//当做下标小于右下标时,表示两个数据需要交换
if(i <= j) {
//下标i值与下标j值互换
strTemp = pData[i];
pData[i] = pData[j];
pData[j] = strTemp;

//
iTemp = pDataNum[i];
pDataNum[i] = pDataNum[j];
pDataNum[j] = iTemp;

i++;
j--;
}
}while(i <=j);//如果两边扫描的下标交错,就停止(完成一次)

//没有排序完,继续
if(left <j)
QuickSort(pData,pDataNum,left,j);

//没有排序完,继续
if(right> i)
QuickSort(pData,pDataNum,i,right);
}
  相关解决方案