`

String数组的二分排序

 
阅读更多


public class Bsearch {

  /*
   String[] str = new String[]{"abai","aven","cai","creport","czz"};
   数组长度为1000以上,已知"rose"为数组中其中一个字符串,排列在未知位置,请用最快速度查找该字符串所在的索引
  */
 
 public static void main(String[] args) {
  String[] str = new String[] {"sdaf","fads","dsaf","sdfdsa","hdfh","rose","ghdfgh"}; 
  // 这里定义一个字符串 可以很灵活的查找 任字符串
  String str1="rose";
  // 先进行排序
  stringBubble(str);
  
  // 排序后输出
  printStr(str);
  
     // 找到其索引
  int index=seach(str,str1); 
  
  System.out.println(index);
  
 }

 private static void printStr(String[] strs) {
   for(String str:strs){
    System.out.print(str+" ");
   
   }
   System.out.println();
   System.out.print("找该字符串所在的索引为: ");
  
 }

 private static int seach(String[] strs, String str1) {
         
  int  start=0;
  int  end=strs.length-1; 
  int  mid=0;
  // 防止进入死循环
  while(mid<=end){ 
   if(mid==end && !strs[mid].equals(str1)){
         return 0;
   }
   // 往前折半查找
   if(strs[mid].compareTo(str1)>0){
     end = mid;   
     if((start+end)%2==0){
      mid=(start+end)/2;
     }
     else{ 
      mid=(start+end)/2 +1;
     }
     continue;
   }
   // 往后折半查找
   else if(strs[mid].compareTo(str1)<0){
        start=mid;
        if((start+end)%2==0){
         mid=(start+end)/2;
        }else{
         mid=(start+end)/2+1;
        }
        continue;
      }
   // 找到了
      else if(strs[mid].compareTo(str1)==0){
       return mid;
       
      }
   
  }
  return 0;
  
  
 }
 
 public static String[] stringBubble(String[] arr) {
  for (int i = 0; i < arr.length - 1; i++) {
   for (int j = 0; j < arr.length - i - 1; j++) {
    if (arr[j].compareTo(arr[j + 1]) > 0) {
     swap(arr, j, j + 1);
    }
   }
  }
  return arr;
 }

 public static void swap(String[] arr, int a, int b) {
  String temp = arr[a];
  arr[a] = arr[b];
  arr[b] = temp;
 }
}

分享到:
评论

相关推荐

    java数组二分查找

    二分查找是一种在有序数组中寻找特定元素的搜索算法,其效率显著高于线性查找。本篇文章将详细探讨Java中的二分查找及其应用。 首先,我们要了解什么是数组。在计算机科学中,数组是一种数据结构,它存储了一组相同...

    Java编程实现中英混合字符串数组按首字母排序的方法

    在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[] arrays = new String[] { gyu, sdf, zf, 大同, 收到, 地方, 三等分, 的人, 反对高铁, 泛代数, 上的投入...

    浅谈对象数组或list排序及Collections排序原理

    在排序过程中,`ComparableTimSort`会进行二分查找(binary sort)来确定元素位置,然后调用元素的`compareTo()`方法进行比较。 对于`List&lt;String&gt;`,由于`String`类已经实现了`Comparable`接口,因此`compareTo()`...

    数组应用&二维数组.doc

    二分查找是在有序的数组中进行查找的方法。注意,使用二分查找,必须是在有序的数组中。 4. 数组的使用思想 数组的特点是: * 数组是一个容器,可以存放相同类型的数据 * 数组有容量大小,使用length属性可以获取...

    12道不错的数组例题

    - `Arrays.binarySearch()`方法可用于已排序数组的二分查找,返回元素的索引。如果数组未排序,先调用`Arrays.sort()`。 6. **数组复制与拷贝**: - `System.arraycopy()`方法用于复制数组的一部分或全部到另一个...

    Java中的数组

    对于已排序的数组,可以使用二分查找提高效率。此外,`Arrays`类也提供了查找方法: ```java int[] arr = {1, 2, 3, 4, 5}; int index = Arrays.binarySearch(arr, 3); // 查找元素3的位置 ``` #### 八、Arrays工具...

    java代码-数组二分查找

    在Java编程语言中,二分查找(Binary Search)是一种高效的搜索算法,尤其适用于有序的数组。这个算法基于分治法的思想,将问题不断拆解,直到找到目标元素或者确定目标不存在。下面,我们将深入探讨二分查找的工作...

    排序,查找,取最大值,反转-----数组.txt

    折半查找也称为二分查找,是在有序数组中查找某一特定元素的一种搜索算法。其基本思想是将 n 个元素分成大致相等的两部分,取 a[n/2] 与 x 进行比较:如果 x=a[n/2],则找到 x ,算法结束;如果 x[n/2],则只要在...

    java 数组 PPT

    2. 深拷贝与浅拷贝:数组拷贝有深拷贝(复制整个数组及其中的元素)和浅拷贝(只复制数组引用)之分,使用`System.arraycopy()`方法可以实现深拷贝。 3. 排序:Java的`Arrays`类提供了对数组进行排序的方法,如`...

    C#做的有序数组

    查找元素在有序数组中可以通过二分查找法实现,其效率显著高于线性查找。基本步骤包括: 1. 设置查找范围的起始和结束索引。 2. 如果起始索引大于结束索引,表示未找到元素。 3. 否则,计算中间索引,比较中间元素与...

    Java数组讲解

    - `binarySearch(array, key)`:对已排序的数组进行二分查找。 #### 1.8 常见算法 - **排序算法**: - **冒泡排序**:通过重复地比较相邻的两个元素,并交换顺序不正确的元素,从而达到排序的目的。 - **选择...

    java 二分法查找案例与数组排序案例.docx

    1. **递归与循环选择**:该案例采用递归来实现二分查找算法。递归方法能够清晰地表达问题的解决思路,但在某些情况下可能不如循环更高效。 2. **数组边界检查**:首先检查目标值是否在数组范围内,这是为了防止不必...

    学生信息管理系统 数组

    - 查找:查找特定学生,可以使用线性搜索(遍历)或二分搜索(前提是对数组排序)。 5. 动态数组与向量: 在C++中,`std::vector`提供了一种动态数组,允许在运行时添加或删除元素。相比C风格的数组,`std::vector`...

    数据结构实验报告+代码(链表 二叉树 图 字符串 数组 排序 队列 栈)

    二叉树常用于搜索、排序和文件系统等,例如二分查找和AVL树。 3. **图**:图是由节点(顶点)和边组成的非线性数据结构,表示了元素之间的关系。图可以是无向的(边没有方向)或有向的(边有方向)。图算法如深度...

    二分搜索算法

    1. **升序数组**:如果数组是升序排列的,则遵循传统的二分搜索逻辑,即当 `x &gt; a[middle]` 时,更新 `left = middle + 1`;反之,更新 `right = middle - 1`。 2. **降序数组**:如果数组是降序排列的,则当 `x &gt; a...

    Java数组中的查找

    ### Java数组中的查找:基础...通过理解并实现线性查找算法,你可以开始探索更复杂的搜索技术,如二分查找,这在处理已排序的数组时提供了更高的效率。总之,理解并能够应用这些基本算法是成为熟练程序员的重要一步。

    前端大厂最新面试题-sort (1).docx

    本资源提供了179道前端大厂最新面试题的排序部分,涵盖了排序算法、链表操作、数组操作、二分查找、矩阵操作、String操作、数据结构、算法设计、时间复杂度和空间复杂度等知识点,旨在帮助开发者更好地理解和掌握...

    c++数据结构---二分查找

    4. **数组排序**:二分查找的前提条件是数组已经排序,本示例代码未对数组进行排序处理,因此在实际应用中需要先对数组进行排序。 综上所述,二分查找是一种高效的查找算法,尤其适用于大型有序数组。在C++中,通过...

    Java二分查找示例代码

    在编程领域,二分查找(Binary Search)是一种高效地在有序数组或集合中搜索特定元素的算法。这个算法充分利用了数组的线性特性,通过不断缩小搜索范围来找到目标值。下面我们将深入探讨Java实现二分查找的具体步骤...

    Java程序设计:5 数组与字符串.part3.ppt

    - 二分查找:适用于已排序的数组,每次比较中间元素,根据比较结果缩小搜索范围,效率高。 7. `java.util.Arrays`类: - 提供了数组排序方法`Arrays.sort()`,适用于基本类型数组。 - `Arrays.binarySearch()`...

Global site tag (gtag.js) - Google Analytics