• 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

VPS Starter Arubacloud
0 głosów
1,706 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,010 wizyt
0 głosów
1 odpowiedź 274 wizyt
pytanie zadane 27 lutego 2020 w PHP przez Młody programista Obywatel (1,200 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...