Java 合并排序将重复数据添加到数组中
我正在使用Java尝试使用合并排序对对象的价格进行排序。我已经在另一段代码中使用了合并排序,这段代码运行得非常好,我使用该模型为我正在处理的另一个项目开发了一个合并排序。但是,当我运行程序时,它不会输出数组中的所有项,并最终复制了一些项 TestItem.javaJava 合并排序将重复数据添加到数组中,java,arrays,sorting,merge,Java,Arrays,Sorting,Merge,我正在使用Java尝试使用合并排序对对象的价格进行排序。我已经在另一段代码中使用了合并排序,这段代码运行得非常好,我使用该模型为我正在处理的另一个项目开发了一个合并排序。但是,当我运行程序时,它不会输出数组中的所有项,并最终复制了一些项 TestItem.java public static void sortPrice(Item[] it, int low, int high) { if (low == high) { return; } int mid
public static void sortPrice(Item[] it, int low, int high) {
if (low == high) {
return;
}
int middle = (low + high)/2;
sortPrice(it, low, middle);
sortPrice(it, middle + 1, high);
merge(it, low, middle, high);
}
public static void merge(Item[] it, int l, int m, int h) {
System.out.println(h-l+1);
Item[] tmpItem = new Item[h - l + 1];
int index = 0;
int i = l, j = m + 1;
while (i <= m || j <= h) {
System.out.println(m);
if (i > m) {
tmpItem[index] = it[j];
j++;
} else if (j > h) {
tmpItem[index] = it[i];
i++;
} else if (it[i].getPrice() > it[j].getPrice()) {
tmpItem[index] = it[i];
i++;
} else {
tmpItem[index] = it[j];
j++;
}
index++;
}
for (int k = l; k <= h; k++) {
it[k] = it[k - l];
}
}
实际产量:
1201: Wrench Sets Quantity Available: 55 Price: $80.0
1034: Door Knobs Quantity Available: 60 Price: $21.5
1600: Levels Quantity Available: 80 Price: $19.99
1201: Wrench Sets Quantity Available: 55 Price: $80.0
1034: Door Knobs Quantity Available: 60 Price: $21.5
1600: Levels Quantity Available: 80 Price: $19.99
项目在Item.java中声明
public static void sortPrice(Item[] it, int low, int high) {
if (low == high) {
return;
}
int middle = (low + high)/2;
sortPrice(it, low, middle);
sortPrice(it, middle + 1, high);
merge(it, low, middle, high);
}
public static void merge(Item[] it, int l, int m, int h) {
System.out.println(h-l+1);
Item[] tmpItem = new Item[h - l + 1];
int index = 0;
int i = l, j = m + 1;
while (i <= m || j <= h) {
System.out.println(m);
if (i > m) {
tmpItem[index] = it[j];
j++;
} else if (j > h) {
tmpItem[index] = it[i];
i++;
} else if (it[i].getPrice() > it[j].getPrice()) {
tmpItem[index] = it[i];
i++;
} else {
tmpItem[index] = it[j];
j++;
}
index++;
}
for (int k = l; k <= h; k++) {
it[k] = it[k - l];
}
}
对不起,如果我犯了语法错误或造成混乱。我还在学习Java编程语言。谢谢你的帮助 代码从它[]合并到tempItem[],这样last for循环应该从tmpItem[]复制回它[]:
index = 0;
for(i = l; i <= h; i++)
it[i] = tempItem[index++];
index=0;
对于(i= l;i@ TiMyAythEJR.-这是一个简单的错误。您可能需要考虑调用代码中的TimeTeM[](size =高-低1)的一次分配,或者调用一个以TEMPITEM[]作为参数的归并排序的内部版本的帮助函数。可以是分配tempItem的帮助函数,然后将其用作mergesortPrice(it、low、high、tempItem)的参数。但对于这么小的数组来说,这不是什么大问题。