Algorithme pour trouver le plus grand entier dans la gamme

Je suis en train de créer une méthode qui retourne un int - la valeur du plus grand entier dans l'envoyé de tableau.
La façon dont je veux que cette méthode de travail est la vérification de la première et le dernier élément du tableau dans une boucle for, et de travailler leur chemin vers le milieu. J'ai donc = premier entier, k = dernière entier. Lorsque i = 0, k = n-1 (index), lorsque i = 1, k = n-2 si vous attrapez ma dérive. Dans chaque boucle, il est nécessaire de vérifier if a[i]>a[k]. Puis ils changent de place. Alors je sais que le plus grand nombre est le leader de la moitié de la matrice, et puis je veux vérifier que la moitié, si, finalement, le plus grand int est à l'index 0.

J'ai essayé comme ceci:

public static int maxOfArray(int[] a)
{
    int length = a.length;

    if(length<1)
        throw new NoSuchElementException("Not at least one integer in array");

    while (length > 1)
    {
        int k = length;

        for(int i = 0; i < length/2; i++)
        {
            k--;

            if(a[i]<a[k])
            {
                int j = a[i];
                a[i] = a[k];
                a[k] = j;
            }
        }
        length /=2;
    }
    return a[0];
}

..mais je n'ai pas vraiment l'obtenir.. je vais avoir un moment difficile de "s'imaginer" ce qui se passe ici.. Mais il n'est pas toujours de travailler.. (même si parfois).

MODIFIER
Aussi: Le tableau {6,15,2,5,8,14,10,16,11,17,13,7,1,18,3,4,9,12}; va cracher 17 que le plus grand nombre. Je me rends compte que j'ai pour fixer la longueur impaire bug, mais j'aimerais résoudre ce même longueur de la matrice de première..

Pouvez-vous élaborer sur la raison pour laquelle vous essayez de la complexité de la méthode où une analyse linéaire fait le truc? Est-il HW? exemple d'un livre? entrevue? Elle pourrait nous aider à vous donner de meilleures réponses ciblées.
"[...] Puis ils changent de places" - ressemble à l'OP veut réellement sort le tableau dans certains de tri à bulles style. S'il vous plaît ajouter le quiz de la balise!
Eh bien, oui. C'est pour un petit projet d'école. Je peux voir beaucoup de réponses à d'autres méthodes, mais la demande est de comparer le premier et le dernier, puis changer de place si le dernier est plus grand - puis continuer vers le milieu du tableau. Le plus important est de ne pas être mis à l'index 0, juste placé sur le côté "gauche" de la matrice, donc de le placer sur l'index 0 lorsque vient le temps..
Le plus important serait de ne pas toujours être à la pointe de la moitié. Dites vous tableau est [1, 5, 3], alors vous en premier comparer (1 > 3), (5 > 5) et enfin (3 > 1). Vous avez maintenant [3, 5, 1] et vous diviser la longueur par 2, ce qui vous donne la matrice [3]. Vous avez perdu le 5. Aussi, si vous passez la comparaison que vous n'avez pas de numériser l'ensemble du tableau, mais seulement la moitié. Maintenant vous déplacez d'abord un grand nombre de la moitié du haut, puis vers le bas.
Donc for(int i = 0; i < length; i++) est faux, vous avez seulement besoin d'itérer sur la première moitié du tableau: for(int i = 0; i < length / 2; i++). Également vérifier ce qui se passe si la taille de la matrice est impair.

OriginalL'auteur Sti | 2012-09-11