gpt4 book ai didi

java - 降序快速排序在重复条目上无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:11 25 4
gpt4 key购买 nike

我在使用递归快速排序算法时遇到了一些问题。元素未按正确顺序排序。输入数据也是具有重复条目的字符串。我使用整数来区分升序 ( 1 ) 和降序 ( -1 ) 排序。枢轴是中间元素。每当比较重复条目时( compareTo(String s) 将返回 0),我比较当前索引,如果被比较的字符串的索引大于另一个字符串的索引,则返回负数。我不确定到底出了什么问题。下面是代码

// Quick sort Algorithm
public void sort(int left, int right)
{
int i = left, j = right;
String mid;

mid = (String)vect.elementAt((left + right)/2);

while (i <= j)
{
// Compare the elements to the left
while ((i < right) &&
(compare((String)vect.elementAt(i), mid) < 0))
i++;
// Compare the elements to the right
while ((j > left) && (compare((String)vect.elementAt(j), mid) > 0))
j--;

if (i <= j)
{
if(i!=j)
swap(i, j);

i++;
j--;

}
}
// Recursively call the sort method until indices cross.
if(left < j)
sort(left, j);
if(i < right)
sort(i, right);
}

/*
* Compare method to compare the elements.
* type = 1, for ascending sort
* type = -1, for descending sort
*/
public int compare(String firstObj, String secondObj)
{
int resCompare = firstObj.compareTo(secondObj)*type;
if(resCompare == 0)
{
int index_firstObj = vect.indexOf(firstObj);
int index_secObj = vect.indexOf(secondObj);
if(index_firstObj < index_secObj)
return -1;
else
return 1;
}
return resCompare;
}
// Swap the elements at i and j.
public void swap(int i, int j)
{
String tmp1 = (String)vect.elementAt(i);
String tmp2 = (String)vect.elementAt(j);

vect.setElementAt(tmp1, j);
vect.setElementAt(tmp2, i);

}

例子:输入 = {"AA","BB","zz","cc","aa","AA","PP","hh"};升序排序输出 = {"AA","AA","BB","PP","aa","cc","hh","zz"};降序排序输出 = {"zz","hh","cc","BB","aa","PP","AA","AA"};

算法中的问题可能不适用于升序排序以及某些其他输入数据。因此,任何帮助查找代码/逻辑中的故障的帮助都将非常有帮助。提前致谢。

已解决:不需要找index_firstObj和index_SecondObj。如果 resCompare 为零,则不要做任何事情。 public int 比较(字符串 firstObj,字符串 secondObj) { int resCompare = firstObj.compareTo(secondObj)*type; 返回资源比较;

最佳答案

如果 i 或 j 成为中间怎么办?而另一个还不是中间?那不也会出现问题吗?您可能需要检查其中一个是否成为中间。

关于java - 降序快速排序在重复条目上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12243602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com