插入排序Java未正确排序
我正在尝试自己编写冒泡排序、选择排序和插入排序的程序。但是,我在插入排序方面遇到了问题。我将提供我的代码以及每行代码的作用插入排序Java未正确排序,java,Java,我正在尝试自己编写冒泡排序、选择排序和插入排序的程序。但是,我在插入排序方面遇到了问题。我将提供我的代码以及每行代码的作用 public void sortMethod() { int count = 1; for (int j = 0; j < Unsorted.length - 1; j++) { int index = 0; if (Unsorted[count] < Unsorted[count - 1]) {
public void sortMethod() {
int count = 1;
for (int j = 0; j < Unsorted.length - 1; j++) {
int index = 0;
if (Unsorted[count] < Unsorted[count - 1]) {
int temp = Unsorted[count];
for (int i = count; i > 0; i--) {
if (Unsorted[i] > Unsorted[count]) {
index = i;
Unsorted[i] = Unsorted[i - 1];
}
}
Unsorted[index] = Unsorted[count];
}
count = count + 1;
}
}
这是我修改代码以使其执行插入排序所需的最小数量,因为我知道这样的排序是有效的。请注意,您使用的整数值比需要的要多,如果不需要的话,还有一个额外的
。我添加了大量注释以反映我在修复代码时的想法,因此希望您能够理解代码的作用:
public class Test
private static int[] Unsorted = {444, 7, 22, 4, 3, 2, 1, -34, -999};
public static void sortMethod() {
// We'll consider each position in the array in order. For each round,
// 'j' is pointing at the last item in the part of the array that we know is
// correctly sorted. The first item after 'j' is the next candidate. We
// want to INSERT it into the right place in the part of the array that
// is already sorted. NOTE: The first item is never a candidate because
// an array with one element is always sorted.
for (int j = 0; j < Unsorted.length - 1; j++) {
// save off next candidate value, the first value that may be out of order
int temp = Unsorted[j + 1];
// Move all the items in the sorted part of the array that are greater
// than the candidate up one spot. We know we have room to shift up
// because we've saved off the value at the candiate position.
int i = j;
while (i >= 0 && Unsorted[i] > temp) {
Unsorted[i + 1] = Unsorted[i];
i = i - 1;
}
// Put the candidate in the hole that is left. This inserts it such
// that everything below it has a value smaller than it, and everything
// above it has a value greater than it.
Unsorted[i + 1] = temp;
// Now the array is sorted up to the position j is pointing to and one
// beyond, so we'll advance j by one position for the next round
}
}
public static void main(String[] args) {
sortMethod();
for (int i = 0 ; i < Unsorted.length ; i++)
System.out.println(Unsorted[i]);
}
}
public class Test
private static int[] Unsorted = {444, 7, 22, 4, 3, 2, 1, -34, -999};
public static void sortMethod() {
// We'll consider each position in the array in order. For each round,
// 'j' is pointing at the last item in the part of the array that we know is
// correctly sorted. The first item after 'j' is the next candidate. We
// want to INSERT it into the right place in the part of the array that
// is already sorted. NOTE: The first item is never a candidate because
// an array with one element is always sorted.
for (int j = 0; j < Unsorted.length - 1; j++) {
// save off next candidate value, the first value that may be out of order
int temp = Unsorted[j + 1];
// Move all the items in the sorted part of the array that are greater
// than the candidate up one spot. We know we have room to shift up
// because we've saved off the value at the candiate position.
int i = j;
while (i >= 0 && Unsorted[i] > temp) {
Unsorted[i + 1] = Unsorted[i];
i = i - 1;
}
// Put the candidate in the hole that is left. This inserts it such
// that everything below it has a value smaller than it, and everything
// above it has a value greater than it.
Unsorted[i + 1] = temp;
// Now the array is sorted up to the position j is pointing to and one
// beyond, so we'll advance j by one position for the next round
}
}
public static void main(String[] args) {
sortMethod();
for (int i = 0 ; i < Unsorted.length ; i++)
System.out.println(Unsorted[i]);
}
}
-999
-34
1
2
3
4
7
22
444