我正在读取排序算法,我完成了选择和冒泡排序,并认为我应该尝试实现我理解的东西。我花了一些时间来理解我写的意图是选择排序(代码片段-1)wasn' t实现选择排序的关键特性(即找到未排序数组的min并一次构建排序数组一个元素)。所以我又为选择排序编写了一个(代码片段-3)。但现在,我对Snippet-1感到好奇。有人可以告诉我它是否冒泡?
Code Snippet-1
adjusted
代码段2
public void sort(int[] arr) {
// code snippet-1
int n = arr.length;
for (int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) {
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
代码段-3
public void sort(int[] arr) {
// code snippet-2
int n = arr.length;
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-1; j++) {
if(arr[j] > arr[j+1]){
int temp=arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
此外,在一个不太相关的帐户中,有人可以解释外部for循环条件(即public void sort(int[] arr) {
// Code snippet-3
int n = arr.length;
for (int i = 0; i < n; i++) {
int min = i;
for(int j = i + 1; j < n; j++){
if(arr[j] < arr[min]) {
min = j;
}
}
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
和i<n
)在这些情况下不会影响结果吗?我只将片段2的条件更改为i<n-1
,因为它给了j<n-1
错误,因为arr [j + 1]一词。是的,我在调试模式和动画中看到了整个事情,但仍然不完全清楚如何选择条件。我知道我在这里遗漏了一些东西。
答案 0 :(得分:1)
您有不同的冒泡排序方法,而Arrayoutofbound异常是因为数组中没有的n + 1元素的比较。
在代码片段2中,您还可以通过执行以下操作来避免再循环:
for (int i = 0; i <= n-2; i++)