Maison > Java > javaDidacticiel > le corps du texte

Comment utiliser la méthode binaire pour trouver la position des éléments d'un tableau en Java

WBOY
Libérer: 2023-04-21 21:28:06
avant
1513 Les gens l'ont consulté

1. Explication de la méthode de dichotomie

L'idée centrale de la méthode de dichotomie est le mouvement de l'index, et la vitesse de recherche augmente géométriquement.

Méthode de recherche binaire, renvoie l'index de l'élément du tableau trouvé, s'il n'est pas trouvé, renvoie -1

2 Exemple

La méthode de recherche binaire localise la position de la valeur du paramètre dans le tableau

Description du scénario :

Selon un paramètre La valeur trouve sa plage d'indice dans le tableau, par exemple : La plage de 2 dans le tableau {0, 1, 3, 5} est {1, 2}

package com.study.collection;
 
import java.util.Arrays;
 
/**
 * @auth zhangmj
 * @date 2019/2/12 9:14
 */
public class ExampleList<T> {
 
    public static void main(String[] args) {
        int[] intArray = {0,1,2,10,15,20,25,29,31,36,39,40,42,43,46,50,55,60,63,66,70};
        int num =2;
        int[] resultArray = getPostionByTwoPoint(intArray, num);
        System.out.println(Arrays.toString(resultArray));
    }
 
    private static int[] getPostionByTwoPoint(int[] intArray, int num) {
        // 判断
        if(intArray == null || intArray.length == 0){
            throw new RuntimeException("数组不能为空");
        }
        // 定义最小和区间
        if(intArray[0] > num || intArray[intArray.length - 1] < num){
            throw new RuntimeException("不在数组范围之内");
        }
 
        int middle = 0;
        int low = 0;
        int high = intArray.length - 1;
        // 定义首尾特殊的情况
        if(intArray[low] == num){
            int[] resultArray = {low, low};
            return resultArray;
        }else if(intArray[high] == num){
            int[] resultArray = {high, high};
            return resultArray;
        }
        int i = 1;
        // 数在中间的情况
        while(low < high){
            System.out.println("查找第 " + i + " 次");
            middle = (low + high + 1)/2;
            if(intArray[middle] == num){
                int[] resultArray = {middle, middle};
                return resultArray;
            }else if(intArray[middle] > num){
                // num 在 low 和 middle 之间
                int previous = middle - 1;
                if(previous > low  && intArray[previous] < num){
                    int[] resultArray = {previous, middle};
                    return resultArray;
                }
                high = middle;
            }else if(intArray[middle] < num){
                int latter = middle + 1;
                if(latter < high  && intArray[latter] > num){
                    int[] resultArray = {middle, latter};
                    return resultArray;
                }
                low = middle;
            }
            i++;
        }
        throw new RuntimeException("定位异常");
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal