在1D数组中使用字符串@insertion排序

时间:2016-01-31 14:04:33

标签: java arrays

所以基本上我已经在这个程序上工作了2个多小时,试图弄清楚如何使用compareTo方法对插入排序进行排序,但我的研究或想法都没有。我是java的初学者,所以对我来说有点困难。 如何使用这种方法来理清我无法解决的名称。

package insertion.sort;
import java.util.Scanner;
public class InsertionSort {
public static void swap (int x[] , int y , int z){
int temp;
    if (x[y]<x[y-1]){
temp=x[y];
x[y]=x[y-1];
x[y-1]=temp;
}
}

public static void main(String[] args) {
Scanner in=new Scanner(System.in);
    String a[]=new String[10];
int i;    
for (int ii=1 ; ii<=5 ; ii++){
 System.out.println("Enter the "+ii+" name");
a[ii]=in.nextLine();
}



for (i=0 ; i<5 ; i++){
for (int j=i;j>0;j--){
//a[j].compareTo(a[j-1]);
if (a[j].compareTo((a[j-1])))

    { 

 String temp=a[i];
a[i]=a[j];
a[j]=temp;}
}

}

for (int k=0;k<6;k++){
System.out.println(k);
}   



}
}   
____________________________________________

谢谢你解决了!!!!!!!!  回答:

package insertion.sort;
import java.util.Scanner;
public class InsertionSort {
public static void swap (int x[] , int y , int z){
int temp;
    if (x[y]<x[y-1]){
temp=x[y];
x[y]=x[y-1];
x[y-1]=temp;
}
}

 public static void main(String[] args) { 
 Scanner in=new Scanner(System.in);
   String a[]=new String[5];
int i;   
for (int ii=0 ; ii<5 ; ii++){
System.out.println("Enter the "+ii+" name");
a[ii]=in.nextLine();

}

for (i=1 ; i<5 ; i++){
for (int j=i;j>0;j--){
if (a[j].compareTo(a[j-1])<0)
    { 
 String temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;}}}
for (int k=0;k<5;k++){
System.out.println(a[k]);
}   
}
}   

1 个答案:

答案 0 :(得分:0)

如果查看docs,您会看到compareTo方法返回一个数字:

  

如果参数字符串等于此字符串,则值为0;一个值   如果此字符串按字典顺序小于字符串,则小于0   参数;如果此字符串为,则值大于0   按字典顺序大于字符串参数。

在这一行

if (a[j].compareTo((a[j-1])))

您尝试将int评估为boolean,这肯定不是您想要实现的目标。如果您希望程序进入if,如果a[j]的字面意义上小于a[j-1],那么您需要

if (a[j].compareTo((a[j-1])) < 0)

如果您想要if,如果a[j]的字典大于a[j-1],那么您希望

if (a[j].compareTo((a[j-1])) > 0)

您的程序使用双循环对结果进行排序,外循环迭代String s,第二个循环迭代位于较小或相等索引的String s作为当前外部索引并交换邻居元素,如果需要。这不是插入排序,因为您之前已经插入了元素。在阅读元素时,您需要执行内循环中的逻辑。

您是初学者,但不仅仅是Java。您需要编写结构化代码,并在您使用的方法之后阅读。