顺序查找
二分查找
插值查找
斐波那契查找
public class Search {
public int search ( int [ ] arr, int target) {
for ( int i = 0 ; i < arr. length; i++ ) {
if ( arr[ i] == target) {
System. out. println ( "找到了,下标为:" + i) ;
return i;
}
}
return - 1 ;
}
public ArrayList< Integer> binarySearch ( int [ ] arr, int left, int right, int target) {
ArrayList< Integer> list = new ArrayList < > ( ) ;
if ( left > right) {
return list;
}
int mid = ( left + right) / 2 ;
int midVal = arr[ mid] ;
if ( target > midVal) {
return binarySearch ( arr, mid + 1 , right, target) ;
} else if ( target < midVal) {
return binarySearch ( arr, left, mid - 1 , target) ;
} else {
list. add ( mid) ;
int k = mid;
while ( k > 0 && arr[ -- k] == target) {
list. add ( k) ;
}
int j = mid;
while ( j < arr. length - 1 && arr[ ++ j] == target) {
list. add ( j) ;
}
return list;
}
}
public int insertSearch ( int [ ] arr, int left, int right, int target) {
if ( left > right || target > arr[ arr. length - 1 ] || target < arr[ 0 ] ) {
return - 1 ;
}
int mid = left + ( target - arr[ left] ) / ( arr[ right] - arr[ left] ) * ( right - left) ;
if ( target > arr[ mid] ) {
return insertSearch ( arr, mid + 1 , right, target) ;
} else if ( target < arr[ mid] ) {
return insertSearch ( arr, left, mid- 1 , target) ;
} else {
return mid;
}
}