I'm trying to sort an array of strings alphabetically through comparing their first letters. I can get an insertion sort working with integers but when I change the integers to strings and reference the integer values of the first character for comparison purposes it stops working. Here is my code, could someone help me learn what I have done wrong?
public static boolean cSL(String a, String b)
{
int aN = (int)(a.charAt(0));
int bN = (int)(b.charAt(0));
if(aN < 97) aN += 32;//make case insensitive
if(bN < 97) bN += 32;
return(aN < bN);
}
public static void main(String[] args)
{
String[] sort = {"ai", "ff", "gl", "bw", "dd", "ca"};
for( int c = 1; c < sort.length; c++ )
{
String key = sort[c];
int count = c - 1;
while (count >= 0 && cSL(key, sort[count]))
{
sort[count + 1] = sort[count];
count--;
}
sort[count + 1] = sort[c];
}
//print out the array
for(int n = 0; n < sort.length; n++)
System.out.print(sort[n] + " ");
}
This should output "ai bw ca dd ff gl " but instead it prints "ai gl gl gl ff gl "
Solved!!! All I did was edited the while
loop and commented the next line below it.
public static boolean cSL(String a, String b)
{
int aN = (int)(a.charAt(0));
int bN = (int)(b.charAt(0));
if(aN < 97) aN += 32;//make case insensitive
if(bN < 97) bN += 32;
return aN < bN;
}
public static void main(String[] args)
{
String[] sort = {"ai", "ff", "gl", "bw", "dd", "ca"};
for( int c = 1; c < sort.length; c++ )
{
String key = sort[c];
int count = c - 1;
while (count >= 0 && cSL(key, sort[count]))
{
String temp = sort[count+1];
sort[count + 1] = sort[count];
sort[count] = temp;
count--;
}
//sort[count + 1] = sort[c]; This Line is in comment because it is not needed
}
//print out the array
for(int n = 0; n < sort.length; n++)
System.out.print(sort[n] + " ");
}
After while loop there is logical error in this line
sort[count + 1] = sort[c];
you are using sort[c] where array is being manipulated by the above while loop and indexes are shuffled. Instead you should use the key variable, you used to store current value to be compared as that is over written by loop.
sort[count + 1] = key;
This makes the code work perfect. Hope this helps
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.