java - 霍尔分区分析
问题描述
我的任务是绘制图表并分析 Hoare 的分区算法并比较理论和实际最坏情况的值。它说我需要一个计数变量来跟踪关键步骤(即比较和交换)。我为 Hoare 的分区编写了这段代码。
public static int partition(Comparable[] a, int left, int right) {
Comparable pivot = a[(left + right) / 2];
int i = left - 1, j = right + 1;
while (true) {
do {
i++;
} while (a[i].compareTo(pivot) < 0);
do {
j--;
} while (a[j].compareTo(pivot) > 0);
if (i < j) {
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
} else {
return j;
}
}
}
现在我对在哪里添加 count 变量感到困惑。我知道 count 变量将在 if (i < j) 行中递增。但是我是否还需要在两个 do-while 循环中增加计数以跟踪比较?
那么,更新后的代码会是这样吗?
public static int partition(Comparable[] a, int left, int right) {
int count = 0;
Comparable pivot = a[(left + right) / 2];
int i = left - 1, j = right + 1;
while (true) {
do {
count++;
i++;
} while (a[i].compareTo(pivot) < 0);
do {
count++;
j--;
} while (a[j].compareTo(pivot) > 0);
if (i < j) {
count++;
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
} else {
return j;
}
}
}
还是像这样?
public static int partition(Comparable[] a, int left, int right) {
int count = 0;
Comparable pivot = a[(left + right) / 2];
int i = left - 1, j = right + 1;
while (true) {
do {
i++;
} while (a[i].compareTo(pivot) < 0);
do {
j--;
} while (a[j].compareTo(pivot) > 0);
if (i < j) {
count++;
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
} else {
return j;
}
}
}
解决方案
推荐阅读
- android - 为什么我不能从 sqlite 数据库中获取用户 ID
- vba - 如何将我的宏更改为 Worksheet_Change 事件 Excel VBA
- javascript - 我可以为一个元素中的一个属性分配多个 data-id 值吗?
- python - 使用 Tensorflow 轻松检查自定义渐变
- java - org.apache.http.conn.HttpHostConnectException:连接到 http://localhost 被拒绝
- c# - 组合框 - 初始值是正确的,之后的任何调用都会在投射期间出现错误
- azure - Azure SQL PaaS 和 Azure Policy 交互
- python - 无法导入木偶
- android - 迁移到 Gradle 3.0.0 时出现foregroundInsidePadding 错误
- c++ - 仅优化 Debug 配置中的单个方法