• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Drugi największy element w tablicy

Object Storage Arubacloud
0 głosów
1,741 wizyt
pytanie zadane 1 kwietnia 2019 w Java przez Paweł123 Nałogowiec (33,500 p.)

Witam, robię program który wyznacz drugą największą liczbę w zbiorze.

Użytkownik podaje n=6 i w tym momencie losują się liczby z przedziału 0-1 sześć razy.

Napisałem coś takiego jednak mam problem ze znalezieniem drugiej największej liczby, czy ktoś wie jak to zrobić?

import java.util.*;
import java.lang.Math;

public class JavaApplication {
    private static Random random = new Random();
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        int n, i;
        
        System.out.println("Podaj ilosc liczb, ktroe chcesz wprowadzic: ");
        n = input.nextInt();
        double[] liczby = new double[n];
        
        i = 0;
        int losowy;
        
        while (i < n) {
            liczby[i] = random.nextInt(100);
            liczby[i] = liczby[i] / 100;
            i = i + 1;
        }
        int index;
        
        for (i = 0; i <= n - 1; i++) {
            System.out.println(Integer.toString(i + 1) + ". " + liczby[i]);
        }
        double max;
        
        max = liczby[0];
        int j;
        int second;
        
        for (j = 0; j <= n - 1; j++) {
            if (max <= liczby[j]) {
                max = liczby[j];
                index = j + 1;
                second = liczby[i - 1];
            }
        }
        System.out.println("Losowe: " + second + " index: " + index);
    }
}

 

2 odpowiedzi

+2 głosów
odpowiedź 1 kwietnia 2019 przez Kacper Sas Dyskutant (8,460 p.)
wybrane 1 kwietnia 2019 przez Paweł123
 
Najlepsza
double max, second;
         
        max = second = 0;
        int j;
         
        for (j = 0; j <= n - 1; j++) {
            if (max <= liczby[j]) {
                second = max;
                max = liczby[j];
            }
        }

Nie jestem pewien, może w ten sposób?

komentarz 1 kwietnia 2019 przez Paweł123 Nałogowiec (33,500 p.)
Dzięki, a może masz pomysł jak zrobić, aby wypisać numer indexu tablicy w którym jest ta liczba?
+1 głos
odpowiedź 1 kwietnia 2019 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Najprościej posortować i wziąć drugi element tablicy (tzn o indeksie 1) wink

Możesz też wyznaczyć największy element, usunąć go ze zbioru danych i znowu wyznaczyć największy element.

A Twoim sposobem... musiałbym chwilę pomyśleć. Zapewne będzie najbardziej optymalny, ale też trochę "trudniejszy" w działaniu

komentarz 1 kwietnia 2019 przez Paweł123 Nałogowiec (33,500 p.)
Np. Posortować metodą bąbelkową?
komentarz 1 kwietnia 2019 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Możesz, ale lepiej jakimś szybszym i gotowym algorytmem; po co się męczyć i pisać kod sortowania bąbelkowego (w bibliotece standardowej go pewnie nie znajdziesz), który będzie niewydajny. Lepiej użyj jakiejś implementacji quicksorta.
komentarz 1 kwietnia 2019 przez mbabane Szeryf (79,280 p.)
Jest implementacja w javie sortowania tablicy:

Arrays.sort():

https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#sort-double:A-

Zgodnie z opisem użyty jest Quicksort.
komentarz 1 kwietnia 2019 przez miro Pasjonat (23,870 p.)
Zastanowiłem się na chwilę czytając Was. Jest gdzieś w Javie implementacja Insertion sort? Byłaby ona lepsza niż quicksort dla mniejszej ilości danych.
Zawsze mnie dziwiło, że w API javy nie możemy sobie zmieniać algorytmów.
komentarz 2 kwietnia 2019 przez mbabane Szeryf (79,280 p.)
Bezpośrednio w API Javy chyba nie ma i nie da się wprost podmienić tych algorytmów. Możesz co prawda poniekąd zrobić to z listą, tworząc jej własną implementacje (pewnie nie ma to za dużego sensu, ale można). Innym sposobem może być np. odziedziczenie po jakieś implementacji np. ArrayList i przeciążenie metody sort.

Nie wiem czemu umieścili tylko Quicksorta, może doszli do wniosku, że innych się i tak nie opłaca stosować, bo i tak sortując 100 elementów nie ma żadnej różnicy miedzy quicksortem a innym algorytmem. A dzięki temu mają jakieś zabezpieczanie jeśli ktoś będzie chciał posortować 1000000 elementów.

Zgaduje że są dostępne jakiś biblioteki, które mają jakieś ciekawe API z tym związane - niestety nie znam takiej. Może jakaś Guava czy Apache Commons. Przeglądnąłem je tak pobieżnie pod tym kątem i nie znalazłem takich opcji.

Podobne pytania

0 głosów
1 odpowiedź 1,074 wizyt
0 głosów
1 odpowiedź 294 wizyt
pytanie zadane 27 lutego 2020 w PHP przez Młody programista Obywatel (1,200 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...