字符串的二进制搜索算法/排序是字符串吗?

时间:2017-03-22 23:03:16

标签: java

我对其中一个课程有疑问,如下所示。






    

  1. 您需要创建一个搜索ArrayList的方法。一个。对搜索方法使用二进制搜索算法,其中包括排序
功能。不要使用Java.util.Arrays.binarySearch()方法,但是
编写二进制搜索算法代码。湾显示数组元素
和数组索引。
  2. 







我在网上找到答案时遇到了麻烦(现在已经找了几个小时)。


 


我理解二进制搜索是如何工作的,但不是当涉及到stings时,我理解一个数组需要在二进制搜索之前进行排序,但是如何在不使用Array.sort函数的情况下执行此操作。





有人能指出我正确的方向来解决这个问题吗?





干杯!





以下是代码:二进制搜索代码是非常低调的,而我正在调用的搜索部分是在按下“3”时的中间位置。




  import java.util.ArrayList;
 import java.util.List;

 import javax.swing.JOptionPane;&#xA ;


公共类BirdArrayList {

 static ArrayList< String> birdList = new ArrayList< String>(5);
 static String response;
 static int birdIndex = -1;

 public static void main(String [] args)
 {

 birdList.add( “乌鸦”); //将五个初始鸟添加到birdList ArrayList
 birdList.add( “鹊”);
 birdList.add( “鸽”);
 birdList.add( “雀”);
 birdList.add( “翠鸟”);


 while(!“5”.equals(response))
 {
 response = JOptionPane.showInputDialog(“请输入您想要做的数字\ n”
 +“1 \ t将鸟添加到列表中\ n”
 +“2 \ t删除一只鸟从列表\ n“
 +”3 \ t搜索列表中的鸟\ n“
 +”4 \ t显示鸟类列表\ n“
 +”5 \ t退出程序“); //程序的主屏幕,格式很好

 if(response.equals(“1”))//添加一只鸟
 {
的addEntry();
 }

 if(response.equals(“2”))//从列表中删除一只鸟
 {
 deleteEntry();
 }

 if(response.equals(“3”))//搜索鸟类
 {
 response = JOptionPane.showInputDialog(“请输入一个鸟名来搜索它\ n并查看它是否在列表中!”);
 int birdIndex =(binarySearch(birdList,response));
 if(birdIndex> = 0)
 {
 JOptionPane.showMessageDialog(null,“鸟名”+响应+“在列表中”
 +“\ nin数组索引(”+ birdIndex +“)”);
 }
 }


 if(response.equals(“4”))//显示数组
 {
 displayArray();
 }
 if(response.equals(“5”))//退出程序
 {
 System.exit(0);
 }
 }

 }

 public static void addEntry()
 {
 response = JOptionPane.showInputDialog(“请输入一个鸟名来将其添加到列表中”); 
 birdList.add(响应); //在下一个数组位置
中添加对birdList的响应JOptionPane.showMessageDialog(null,response +“added!”); //显示添加的鸟名
 displayArray();
 }

 public static void deleteEntry()
 {
 response = JOptionPane.showInputDialog(“请输入一个鸟名来从列表中删除它”);
 boolean isRemoved = false;
 for(int i = 0; i< birdList.size(); i ++)
 {
如果(birdList.get(ⅰ).equalsIgnoreCase(响应))
 {
 birdList.remove(ⅰ);
 JOptionPane.showMessageDialog(null,response +“removed!”);
 isRemoved = true;
 }

 }
 if(isRemoved == false)
 {
 JOptionPane.showMessageDialog(null,“你试图删除的鸟不在列表中”);
 }
 displayArray();

 / *在重新阅读要求之前,我最初是怎么做的。
 /*if(birdList.contains(response))
 {
 birdList.remove(响应);
 JOptionPane.showMessageDialog(null,response +“removed!”);
 }
否则
 {
 JOptionPane.showMessageDialog(null,“你试图删除的鸟不在列表中”);
 } * /
 }
 public static void displayArray()
 {
 String displayList =“”;
 int tempCounter = 0;
 for(int i = 0; i< birdList.size(); i ++)//显示ArrayList
 {
 String tempBird = birdList.get(i); //使tempBird在displayList公式2中更加可行
 tempCounter ++; //在列表中的鸟之前显示一个nuber
 displayList + = tempCounter +“。”+ tempBird +“\ n”; //很好地格式化
 }
 JOptionPane.showMessageDialog(null,displayList); //显示列表

 }

 public static int binarySearch(List< String> birdList,String response)
 {
 int low = 0;
 int high = birdList.size();
 int mid =(low + high)/ 2;



 while(低< high&&!birdList.get(mid).equalsIgnoreCase(response))
 {
 if(birdList.get(mid).equalsIgnoreCase(response))
 {
 low = mid + 1;
 
别的
 {
高=中 -  1;
 }

 mid =(低+高)/ 2;

如果(低>高){
 birdIndex = mid;
 }

 }
 System.out.println(“低”+低+“\ nhigh”+高+“\ nmid”+ mid +“\ nBI”+ birdIndex);
 birdIndex = mid;
 return birdIndex;
 }
}
  



1 个答案:

答案 0 :(得分:0)

您可以使用任何种类的算法手动对数组进行排序,使用compareTo(String otherString)方法查看另一个字符串是否小于"或者"大于"另一个。

如果您要使用选择排序算法,代码将如下所示:

// will iterate throughout the entire list to sort
for (int i = 0; i < birdList.size() - 1; i++) { 
      int lowestVal = i;

      // will iterate through list to find next smallest value
      for (int j = i + 1; j < birdList.size(); j++) {
           if (birdList.get(j).compareTo(birdList.get(lowestVal)) < 0)
               lowestVal = j; // found new minimum value
   }

   // swap out the next lowest value with the next value in the list
   String temp = birdList.get(i);
   birdList.set(i, birdList.get(lowestVal));
   birdList.set(lowestVal, temp);
}

编辑:更多信息。 compareTo方法是String类碰巧实现的Comparable接口的一部分。这允许您基本上比较字符串并以这种方式对它们进行排序。