使用合并排序对(名称)进行排序
Posted
技术标签:
【中文标题】使用合并排序对(名称)进行排序【英文标题】:Sorting (names) using Merge Sort 【发布时间】:2014-01-14 17:15:14 【问题描述】:对重复的字符串进行排序时遇到问题,
这是我的代码..
我成功地对第一个数组进行了排序,但在第二个数组中(带有重复的字符串),它似乎没有按顺序输出,你能帮我追踪一下我的代码中有什么问题吗..
import java.util.*;
public class NewClass
public static void main(String[] args)
String[] ClassOne = "Kring", "Panda", "Soliel", "Darryl", "Chan", "Matang", "Jollibee.", "Inasal" ;
String[] ClassTwo = "Minnie", "Kitty", "Madonna", "Miley", "Zoom-zoom", "Cristine", "Bubbles", "Ara", "Rose", "Maria" ;
String[] names = new String[ClassOne.length + ClassTwo.length];
mergeSort(ClassOne);
mergeSort(ClassTwo);
merge(names, ClassOne, ClassTwo);
mergeSort(names);
//Arrays.sort(names);
for (String ClassThree : names)
System.out.println(ClassThree);
public static void mergeSort(String[] names)
if (names.length > 2)
String[] left = new String[names.length / 2];
String[] right = new String[names.length - names.length / 2];
for (int i = 0; i < left.length; i++)
left[i] = names[i];
for (int i = 0; i < right.length; i++)
right[i] = names[i + names.length / 2];
mergeSort(left);
mergeSort(right);
merge(names, left, right);
public static void merge(String[] names, String[] left, String[] right)
int a = 0;
int b = 0;
for (int i = 0; i < names.length; i++)
if (b >= right.length || (a < left.length && left[a].compareToIgnoreCase(right[b]) < 0))
names[i] = left[a];
a++;
else
names[i] = right[b];
b++;
这是输出::
Ara
Chan
Cristine
Bubbles
Jollibee.
Inasal
Kring
Madonna
Matang
Miley
Minnie
Kitty
Panda
Rose
Maria
Soliel
Darryl
Zoom-zoom
...
【问题讨论】:
我没有看到重复的字符串。 我的意思是同一个首字母,(maria, madonna, miley...) 你可以使用Arrays.sort,它使用了mergesort 是的,但我只想坚持我自己的功能...... 【参考方案1】:改变
if (names.length > 2)
与
if (names.length >= 2)
输出
Ara
Bubbles
Chan
Cristine
Darryl
Inasal
Jollibee.
Kitty
Kring
Madonna
Maria
Matang
Miley
Minnie
Panda
Rose
Soliel
Zoom-zoom
【讨论】:
【参考方案2】:只要改变这个:
if (names.length > 2)
到
if (names.length > 1)
mergeSort
递归运行,将数组分成两半,然后合并它们并返回调用链。当传递给mergeSort
的数组长度为 基本情况。
【讨论】:
【参考方案3】:为什么不将两个数组(String ClassOne 和 ClassTwo)连接成一个数组,然后在一个数组上调用 MergeSort?在我看来,您的过程使程序更加模棱两可。
【讨论】:
以上是关于使用合并排序对(名称)进行排序的主要内容,如果未能解决你的问题,请参考以下文章