Java-实现快速排序
我正在学习数据结构和算法。因此,我尝试实现快速排序算法Java-实现快速排序,java,algorithm,Java,Algorithm,我正在学习数据结构和算法。因此,我尝试实现快速排序算法 public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = new int[] { 10, 16, 8, 12, 15, 6, 3, 9, 5 }; quickSort(0, arr.length - 1, arr); } public static void quickSort(int star
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[] { 10, 16, 8, 12, 15, 6, 3, 9, 5 };
quickSort(0, arr.length - 1, arr);
}
public static void quickSort(int start, int end, int[] arr) {
if (start < end) {
int partitionIndex = partition(start, end, arr);
quickSort(start, partitionIndex - 1, arr);
quickSort(partitionIndex+1, end, arr); // When passing partitionIndex+1 in the swap method it throws index out of bound exception
System.out.println(Arrays.toString(arr));
}
}
public static int partition(int start, int end, int[] arr) {
int pivot = arr[end];
int pIndex = start;
for (int i = 0; i < end - 1; i++) {
if (arr[i] <= pivot) {
swap(i, pIndex, arr);
pIndex++;
}
}
swap(pIndex, end, arr);
return pIndex;
}
private static void swap(int i, int index, int[] arr) {
int temp = arr[i];
arr[i] = arr[index]; // index out of bound exception is thrown
arr[index] = temp;
}
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
int[]arr=新的int[]{10,16,8,12,15,6,3,9,5};
快速排序(0,arr.length-1,arr);
}
公共静态void快速排序(int start、int end、int[]arr){
如果(开始<结束){
int partitionIndex=分区(开始、结束、arr);
快速排序(开始,分区索引-1,arr);
快速排序(partitionIndex+1,end,arr);//在swap方法中传递partitionIndex+1时,它将索引抛出绑定异常
System.out.println(Arrays.toString(arr));
}
}
公共静态int分区(int开始、int结束、int[]arr){
int pivot=arr[end];
int pIndex=开始;
对于(int i=0;i 如果(arr[i]我假设您试图从实现Lomuto分区方案。如果是这种情况,您的代码中有两个错误,都是在分区方法的for
循环中:
起始索引:
您的算法每次都从0开始。这会导致索引自动边界异常
,因为它会交换pIndex
,即在末尾的数组.length
。如果您解决了这个问题,异常将消失,但排序结果将是[3,5,8,10,12,15,6,16,9]
,这显然不是完美的排序
结束条件:
这里的错误是,每次都缺少最后一次迭代,因为您的结束条件是i
将其更改为i
或i,如果我将其更改为i快速排序
方法?不确定,具体更改位置。您能告诉我吗?partitionIndex+1
正在运行第二次递归调用需要。我在答案中添加了快速排序
方法,所以现在就完成了,除了交换
方法。