我有以下代码正常工作,但任何人都可以告诉我如何更改alogirithm以使用随机数据元素。
而不是下面,我想随机选择枢轴元素,任何帮助将不胜感激
int pivot = arr[(left + right) / 2];
import java.util.Random;
public class QuickSort {
/**
* @param args
*/
public static void main(String[] args) {
int i;
int array[] = {10,9,1,2,3,4,100,200,300,400};
System.out.println(" Quick Sort\n\n");
System.out.println("Values Before the sort:\n");
for(i = 0; i < array.length; i++)
System.out.print( array[i]+" ");
System.out.println();
quickSort(array,0,array.length-1);
System.out.print("Values after the sort:\n");
for(i = 0; i <array.length; i++)
System.out.print(array[i]+" ");
System.out.println();
}
public static int partition(int arr[], int left, int right)
{
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
return i;
}
public static void quickSort(int arr[], int left, int right) {
int index = partition(arr, left, right);
if (left < index - 1)
quickSort(arr, left, index - 1);
if (index < right)
quickSort(arr, index, right);
}
}
答案 0 :(得分:6)
将枢轴变量赋值替换为:
int pivot = arr[left + rnd.nextInt(right - left)];
其中rnd是一个Random类对象,您可以将其设置为私有静态final字段。