字符串数组二分查找(仅限字母组成的字符串)

 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 }

 

posted @ 2021-07-13 19:32  慕|橙  阅读(216)  评论(0编辑  收藏  举报