java - 快速排序 - Java
问题描述
我正在实施快速排序,但答案显示不正确。我一直在寻找错误,但不知道我哪里出错了。答案仍然是 3,5,1,8,6,7,9,2。有人可以告诉我我的代码有什么问题吗?
public class quicksortJava {
public static void main (String args[]) {
int A [] = {3,5,1,8,6,7,9,2};
quicksort(A,0,A.length-1);
for(int i = 0; i < A.length; i++ ){
System.out.print(A[i]+" ");
}
}
public static void quicksort(int[]A,int start,int end){
if (start < end){
int pIndex = partition(A,start,end);
quicksort(A,start,pIndex-1);
quicksort(A,pIndex+1,end);
}
}
public static int partition(int[]A,int start,int end){
int pivot = A[end];
int pIndex = start;
for (int i = start;i < end; i++){
if (A[i] <= pivot){
swap(A[i],A[pIndex]);
pIndex++;
}
}
swap(A[pIndex],A[end]);
return pIndex;
}
public static void swap(int A,int B){
int temp = A;
A = B;
B = temp;
}
解决方案
您的交换方法不起作用,因为您只是在“交换”方法中更改局部变量“A”和“B”。您实际上并没有更改列表中的任何内容。
尝试这个:
public static void swap(int a, int b) {
int tmp = list[a];
list[a] = list[b];
list[b] = tmp;
}
您还需要将所有调用更改为“swap”,以便它们传递索引而不是值。
(此外,Java 变量是小写/驼峰式,而不是大写。您有多个名为“A”的变量,这让一切变得混乱。)
推荐阅读
- javascript - 在特定位置安排节点
- javascript - react-router-dom:如何进行异步调用来决定渲染组件?
- localization - ICU - 如何在模式字符串中指定自定义格式?
- spring - 从 Spring Batch 元数据表中删除历史记录
- sql - 甲骨文 | 使用 SQL | 编写查询以将数据时间范围从 5 分钟更改为自定义分钟 (30,60,120,240)
- sql - BigQuery - 查询以在多个表中查找具有相同 ID 的行
- c++ - 如何从 Qt Creator 保存和导出自定义构建步骤?
- python - 两个日期之间的天数和索引
- postgresql - 所有表和视图的 postgrest swagger-ui 设置文档,而不授予匿名用户对表和视图的选择权限
- firebase - 在进行身份验证之前,如何使用 Flutter 从 Cloud Firestore 搜索和访问数据?