回答

收藏

在java中搜索排序和旋转数组中的元素

技术问答 技术问答 200 人阅读 | 0 人回复 | 2023-09-12

如下所示,您将获得排序和旋转的数组:
( o( e  h* n3 Nint arr[]={16、19、21、25、3、5、8、10};如果你注意到数组已经排序和旋转了。你需要 o(log n) 时间复杂度搜索上述数组中的元素。
3 D) N1 G/ Z) K6 Y. Z                                                               
, f9 d; C/ P+ {) U) ~4 p) L2 O    解决方案:                                                               
3 u& M2 a- e4 Z9 {7 O( @                                                                您可以使用线性搜索在上述数组中搜索元素,但这需要 o(n)。$ B1 x% g) F3 F& s  a" [
您可以使用二进制搜索算法的变体来解决上述问题。您可以使用子数组({16、19、21、25}、{3、5、8、10} )的属性,尽管您不需要找到枢轴点(元素开始减少)。
7 m: s9 ^) W4 H  {/ n算法:. x1 i+ P* t! O. J. E: u
即低 高/2。
; o% E4 U: s& C# s9 T检查 a[mid…high] 是否已排序
  D3 e. _! K" U" K7 e' V. j& a若数字介于范围之间,则较低=中 1。
- b$ r. T0 R* |+ M! ^4 T若数字不在范围内,high=mid-1。; f( E  m1 J9 ]$ O5 ?
检查 a[low..mid] 是否已排序。4 C  ~; w# b. c  }( n" g
如果数字于范围之间,则高 = 中 1..  g; R' E6 W0 C$ k4 }
若数字不在范围内,则较低=中 1。
让我们用示例来理解这一点。
/ E" l+ h5 R3 T  h) g, r" L3 ]( z0 b
   
% i- O* J' P+ [: D) r# u8 i$ `4 ^2 K搜索 5 所涉及的步骤:
4 M! J" A& R* y2 j# a  v- T即 3 (0 7/2)" F8 Z1 K6 u5 X2 z& n; h
amid > ahigh && 5
, A3 P8 Z' T. C# S# l, Sa[mid] == 5,所以你可以回去。
用于在已排序和旋转的数组中搜索元素Java 程序:
/ J4 s; j9 y' Q0 T" N创建一个叫做的类别! {/ i9 ]- G; k6 ~
SearchElementSortedAndRotatedArrayMain.java。$ b" G! `( Y5 R6 s- b" ^
package org.arpit.java2blog;public class SearchElementSortedAndRotatedArrayMain    public static void main(String[] args)        int arr[]={16,19,21,25,3,5,8,10}System.out.println("Index of element 5 : " findElementRotatedSortedArray(arr,0,arr.length-1、5);        public  static  int findElementRotatedSortedArray(int[] arr,int low,int high,int number)           int mid;        while(low arr[mid] && number 当你运行上面的程序时,你会得到以下输出:9 {2 \& p/ o+ U* }6 z& c& M
Index of element 5:5

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则