我的兄弟希望我只通过一个循环来优化我的代码。我看不到Quicksort只能有一个循环并工作。 (他告诉我要去掉内环)用一个循环写一个快速排序
public class QuickSort {
public static void Quick(int[] target, int lo, int hi) {
if (lo >= hi) {
return;
}
Random numberGenerator = new Random();
int pivot = numberGenerator.nextInt(hi-lo)+lo;
int pivotValue = target[pivot];
target[pivot]=target[hi];
target[hi]=pivotValue;
pivot=hi;
int counter;
for(counter=lo; counter<pivot ; counter++){
while(target[counter]>target[pivot]){
if(pivot-counter==1){
int temp=target[counter];
target[counter]=target[pivot];
target[pivot]=temp;
//return; //possibly the problem
}
else{
int temp1 = target[pivot-1];
int temp2 = target[pivot];
target[pivot]=target[counter];
target[pivot-1]=temp2;
target[counter]=temp1;
pivot=pivot-1;
}
}
}
Quick(target, lo, counter-1);
Quick(target, counter, hi);
}
public static void main(String[] args) {
int sizeOfArray = 10;
int numberOfTests = 1000;
int numFailed = 0;
for (int i = 0; i < numberOfTests; i++)
{
int[] iNeedSorting = new int[sizeOfArray];
populateArrayWithRandomNums(iNeedSorting);
//System.out.printf("Test #%d\n", i);
//System.out.printf("Original Array: %s\n", intArrayToString(iNeedSorting));
Quick(iNeedSorting, 0, iNeedSorting.length-1);
if (!isSorted(iNeedSorting)) {numFailed++;}
//System.out.printf("New Array: %s\n\n", intArrayToString(iNeedSorting));
}
System.out.printf("%d test failed\n\n", numFailed);
}
}
你的问题是你看不到内循环?它从以'while'开始的行开始。 – 2010-08-03 18:39:27
@Alex汉弗莱 - 我说我需要删除内循环'while',以便Quicksort只能运行在1循环 – danutenshu 2010-08-03 18:40:51
'Arrays.sort(...)'由于某种原因没有进行剪切? – 2010-08-03 18:43:41