zoukankan      html  css  js  c++  java
  • 字符串数组二分查找(仅限字母组成的字符串)

     1 package algorithm;
     2 
     3 import java.util.Arrays;
     4 
     5 public class HalfSearch {
     6     public static void main(String[] args) {
     7         String[] arr= {"tomato","orange","peach","pear","apple","banana","lemen","pe","p"};
     8         String query="orange";//需要查找的字符串
     9         sort(arr,query);
    10     }
    11     public static void sort(String[] arr,String query) {
    12         //冒泡排序(字符串数组)
    13                 for(int i=0;i<arr.length-1;i++) {
    14                     for(int j=i+1;j<arr.length;j++) {
    15                         String temp;
    16                         //如果首字母大小相同,比较长度,小的在前
    17                         if(arr[i].charAt(0)==arr[j].charAt(0)) {
    18                             if(arr[i].equals(arr[j])) {
    19                                 continue;//结束当次循环
    20                             }
    21                             if(arr[i].length()>arr[j].length()) {
    22                                 temp=arr[j];
    23                                 arr[j]=arr[i];
    24                                 arr[i]=temp;
    25                                 continue;//结束当次循环
    26                             }
    27                             int len;
    28                             if(arr[i].length()<=arr[j].length()) {
    29                                 len=arr[i].length();
    30                             }else {
    31                                 len=arr[j].length();
    32                             }
    33                             //比较首字母后面的每一个进行排序
    34                             for(int k=1;k<len;k++) {
    35                                 if(arr[i].charAt(k)>arr[j].charAt(k)) {
    36                                     temp=arr[j];
    37                                     arr[j]=arr[i];
    38                                     arr[i]=temp;
    39                                     continue;
    40                                 }
    41                             }
    42                         }else {
    43                             //首字母不相等常规排序交换
    44                             if(arr[i].charAt(0)>arr[j].charAt(0)) {
    45                                 temp=arr[j];
    46                                 arr[j]=arr[i];
    47                                 arr[i]=temp;
    48                             }
    49                         }
    50                     }
    51                 }
    52                 System.out.println(Arrays.toString(arr));
    53                 
    54                 //进行二分查找
    55                 int left=0,right=arr.length-1;
    56                 int middle=(left+right)/2;
    57                 while(!arr[middle].equals(query)) {
    58                     System.out.println(arr[left]+","+arr[middle]+","+arr[right]);
    59                     if(arr[middle].charAt(0)>query.charAt(0)) {
    60                         right=middle;
    61                     }else if(arr[middle].charAt(0)<query.charAt(0)){
    62                         left=middle;
    63                     }else{
    64                         if(arr[middle].length()<query.length()) {
    65                             left=middle;
    66                         }else if(arr[middle].length()>query.length()){
    67                             right=middle;
    68                         }else {
    69                             break;
    70                         }
    71                     }
    72                     middle=(left+right)/2;79                 }
    80                 System.out.println(query+"的位置->"+middle);
    81     }
    82 }

    汉字字符串排序因为有封装类,所以比较简单

     1 package algorithm;
     2 
     3 import java.text.Collator;
     4 import java.util.Arrays;
     5 
     6 public class Test {
     7     public static void main(String[] args) {
     8         //汉字比较大小
     9         Collator collator= Collator.getInstance(java.util.Locale.CHINA);
    10         String[] arr= {"中a","美b","俄c","英d","日e"};
    11         for(int i=0;i<arr.length-1;i++) {
    12             for(int j=i+1;j<arr.length;j++) {
    13                 String temp;
    14                 if(collator.compare(arr[i],arr[j])>0) {
    15                     temp=arr[j];
    16                     arr[j]=arr[i];
    17                     arr[i]=temp;
    18                 }
    19             }
    20         }
    21         System.out.println(Arrays.toString(arr));
    22         
    23     }
    24 }
  • 相关阅读:
    4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡
    3 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之heartbeat的搭建
    2 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之MySql的搭建
    1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建
    Python
    Python
    Tools
    DevOps
    Tools
    Tools
  • 原文地址:https://www.cnblogs.com/mc-web/p/15008091.html
Copyright © 2011-2022 走看看