我已经开始在java中编程并尝试学习合并排序。我得到了算法并用它编码。我不明白我错了哪一部分。有人可以帮我解决合并排序和调试此代码。
public class Main {
public static void main(String[] args) {
// Merge Sort
int[] myArray = {2, 4, 1, 6, 8, 5, 3, 7};
mergeSort(myArray);
System.out.println((Arrays.toString(myArray)));
}
public static void mergeSort(int []toSortArray){
int n= toSortArray.length;
if (n < 2) {
return;
}
int mid = n/2;
int [] Left= new int [mid];
int []Right = new int[n-mid];
for(int i=0;i<mid-1;i++){
Left[i]=toSortArray[i];
}
for(int i=mid;i<n-1;i++){
Right[i-mid]=toSortArray[i];
}
mergeSort(Left);
mergeSort(Right);
merge(Left,Right,toSortArray);
}
public static void merge(int[] Left, int [] Right, int []SortedArray){
int nL = Left.length;
int nR= Right.length;
int i=0;//Index position for left array
int j=0;// index of position of Right array
int k=0;// Index position of sorted Array
while (i<nL && j<nR){
if (Left[i]<Right[j]) {
SortedArray[k] = Left[i];
i++;
k++;
}
if (Right[j]<Left[i]){
SortedArray[k] = Right[j];
j++;
k++;
}
}
while(i<nL){
SortedArray[k]=Left[i];
i++;
k++;
} while (j<nR){
SortedArray[k]= Right[j];
j++;
k++;
}
}
}
答案 0 :(得分:0)
在mergeSort()中,复制数据的两个循环应该是i&lt; mid(不是i&lt; mid-1)和i&lt; n(不是我&lt; n-1)。
在merge()中,第一个if应该是if(Left [i]&lt; = Right [j])(不仅仅是&lt;)。第二个if(Right [j]&lt; Left [i])可以用else替换(不需要第二个if)。
以下代码似乎正在运作:
//XElement xFile = XElement.Load("D:/Sample.xml");
XElement xFile = XElement.Parse
(@"<File>
<Cars>
<Car>
<Color>Blue</Color>
<Year>1988</Year>
</Car>
<Car>
<Color>Green</Color>
<Year>1989</Year>
</Car>
<Car>
<Color>Yellow</Color>
<Year>1989</Year>
</Car>
</Cars>
</File> ");
List<condition> c = new List<condition>
{
new condition()
{
color = "Green",
year = "1989"
},
new condition()
{
color = "Blue",
year = "1988"
}
};
var s = new XElement("Cars",
from cc in c
select new XElement("Car",
new XElement("Color", cc.color),
new XElement("Year", cc.year)
)
);
var result = xFile.Descendants("Cars").Intersect(s.Descendants("Cars"));
var fileXML = new XElement("File", result);
fileXML.Save("D:/Result.xml");