Roh*_*ngh 6 java random pivot quicksort
可能重复:
使用Java中的随机数据透视进行快速排序
下面编写的Quicksort代码使用数组的第一个元素作为数据透视表,然后对数组进行排序.现在我想随机选择枢轴而不是第一个,然后对数组进行排序,我被卡住了请告诉我在下面的代码中可以做出哪些更改以获得完美的结果.
import java.util.*;
import javax.swing.JOptionPane;
public class Quicksort {
public static void main(String[] args) {
String arraylength = JOptionPane.showInputDialog("Enter the length of the array.");
int a = Integer.parseInt(arraylength);
if (a == 0) {
System.out.println("Null Length");
} else {
int[] list = new int[a];
for (int i = 0; i < a; i++) {
String input = JOptionPane.showInputDialog("Input the number.");
int c = Integer.parseInt(input);
list[i] = c;
}
System.out.println("Before");
for (int i = 0; i < list.length; i++) {
System.out.print(list[i] + " ");
}
partition(list, 0, list.length - 1);
System.out.println("\nAfter partitionaing");
for (int i = 0; i < list.length; i++) {
System.out.print(list[i] + " ");
}
quickSort(list, 0, list.length - 1);
System.out.println("\nAfter Sorting");
for (int i = 0; i < list.length; i++) {
System.out.print(list[i] + " ");
}
}
}
private static int partition(int[] list, int first, int last) {
int pivot = list[first];
int low = first + 1;
int high = last;
while (high > low) {
while (low < high && list[low] < pivot) {
low++;
}
while (low < high && list[high] >= pivot) {
high--;
}
if (high > low) {
int temp = list[high];
list[high] = list[low];
list[low] = temp;
}
}
while (high > first && list[high] >= pivot) {
high--;
}
if (pivot > list[high]) {
list[first] = list[high];
list[high] = pivot;
return high;
} else {
return first;
}
}
private static void quickSort(int[] list, int first, int last) {
if (last > first) {
int pivotIndex = partition(list, first, last);
quickSort(list, first, pivotIndex - 1);
quickSort(list, pivotIndex + 1, last);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用java中的Random类:
Random rand = new Random();
int num = begin_sub_array + rand.nextInt(end_sub_array - begin_sub_array);
Run Code Online (Sandbox Code Playgroud)
这将从子数组的开头(begin_sub_array)生成一个值到子数组的结尾(end_sub_array).您只需要获取变量num,并在快速排序算法中作为透视图传递.
int pivot = list[num];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21793 次 |
| 最近记录: |