package recursion;
public class QuickSort {
public static void quickSort(int[] input,int beginIndex,int endIndex)
{
if(beginIndex>=endIndex)
{
return;
}
int pivotIndex = partition(input,beginIndex,endIndex);
quickSort(input, beginIndex, pivotIndex-1);
quickSort(input, pivotIndex+1, endIndex);
}
public static int partition(int[] input,int beginIndex,int endIndex)
{
int count = 0;
int pivotElement = input[beginIndex];
for(int i = beginIndex+1;i<=endIndex;i++)
{
if(pivotElement >= input[i])
count++;
}
int temp2 = beginIndex;
int temp = pivotElement;
input[beginIndex] = input[count+beginIndex];
input[count+beginIndex] = temp;
while(beginIndex < endIndex)
{
if(input[beginIndex] <= pivotElement)
{
beginIndex++;
}
else if(input[endIndex]>pivotElement)
{
endIndex--;
}
else
{
int temp3 = input[beginIndex];
input[beginIndex] = input[endIndex];
input[endIndex] = temp3;
}
}
return temp2 + count;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] n = {0,1,0,2,2,1,1,0};
quickSort(n, 0, 7);
for(int i = 0;i<=7;i++)
{
System.out.println(n[i]);
}
}
}
给定一个只包含0,1和2的数组,我想将我的pivot元素设置为等于1,以便所有0都在它之前,所有的2都在它之后 这样它只会扫描一次数组。 但是我无法将我的pivot元素设置为1
所以请帮我解决这个问题!
答案 0 :(得分:1)
使用counting sort。创建一个长度为3的数组。对于每个输入,将一个添加到计数数组的相应索引中。最后,迭代计数数组并创建一个输出数组。像
这样的东西public static int[] countingSort(int[] input) {
int[] count = new int[3];
for (int i : input) {
count[i]++;
}
int pos = 0;
int[] output = new int[input.length];
for (int i = 0; i < count.length; i++) {
for (int t = 0; t < count[i]; t++) {
output[pos++] = i;
}
}
return output;
}