Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Algoritmi - Altro nuovo algoritmo di ordinamento
Forum - Algoritmi - Altro nuovo algoritmo di ordinamento

Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 327
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 15:29
Mercoledì, 13/11/2013
Salve a tutti ho pensato di crearmi un algoritmo di ordinamento che ho chiamato Higher Sort. Premetto che è uscito dalla mia testa e se quindi lo trovate scritto da qualche altra parte sappiate che non l'ho copiato.
Ho però un problema con questo. Intanto ecco il codice c#:

Codice sorgente - presumibilmente C++

  1. public static int[] HigherSort(ref int[] matrice)
  2.         {
  3.             int[] m = matrice;
  4.             int ordinati = 1;
  5.             while (ordinati <= m.Length - 1)
  6.             {
  7.                 int max = 0, maxPos = 0;
  8.                 for (int i = 0; i < m.Length - ordinati; i++)
  9.                 {
  10.                     if (m[i] > max)
  11.                     {
  12.                         maxPos = i;
  13.                         max = m[i];
  14.                     }
  15.                 }
  16.                 int tmp = m[m.Length - ordinati];
  17.                 m[m.Length - ordinati++] = m[maxPos];
  18.                 m[maxPos] = tmp;
  19.                 for (int i = 0; i < m.Length - 1; i++)
  20.                 {
  21.                     if (m[i] > m[i + 1])
  22.                     {
  23.                         tmp = m[i];
  24.                         m[i] = m[i + 1];
  25.                         m[i + 1] = tmp;
  26.                     }
  27.                 }
  28.             }
  29.             return m;
  30.         }



Come si può notare è una variante del Bubble Sort, ma lo è perché se non ci fosse l'ultimo ciclo for, una coppia dell' array sarebbe disordinata. Io voglio rimuovere questo ostacolo, ma non ho intenzione di diffondere questo algoritmo. Data la seguente matrice: { 23, 53, 1, 7, 32, 96, 0, 2, 4, 6, 3 };
il risultato senza il ciclo for è:
0
1
2
4
3
6
7
23
32
53
96
mentre con l'ultimo ciclo il 4 ed il 3 sono invertiti e quindi si trovano nelle giuste posizioni. Come mai? Da dove può derivare il problema?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 10:33
Giovedì, 14/11/2013
asd, riuscire a fare una variante più lenta del bubble sort ce ne vuole di impegno :)

PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 327
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 14:26
Giovedì, 14/11/2013
Magari se avessi letto che voglio rimuovere proprio questo, non avresti sprecato un post per dirmi cio che gia sapevo

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:49
Giovedì, 14/11/2013
Probabilmente i limiti dettati dalla variabile ordinati saranno sbagliati. Il metodo migliore per capire dove hai sbagliato e' di usare un debugger e seguire passo per passo l'esecuzione della funzione.

Occhio che questa funzione (senza il bubble sort) non funzionera' con numeri negativi...

{ 23, -53, 1, 7, 32, -96, 0, 2, -4, 6, 3 }


Il mio blog: https://piero.dev
PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 327
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 11:25
Venerdì, 15/11/2013
Ho risolto. Il problema era stupido: nel ciclo for il contatore non deve essere minore ma deve essere minore o uguale a m.Length - ordinati.
Adesso verificherò se funge con i numeri negativi e al limite faro un riadattamento.

EDIT: verificato l'algoritmo. Funziona anche con numeri negativi.  8-)

Ultima modifica effettuata da tuttodiMC il 15/11/2013 alle 11:40
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:56
Sabato, 16/11/2013
Ma non sarai veramente convinto di avere "inventato" qualcosa? Spero veramente che non sia cosi' ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 327
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 18:30
Sabato, 16/11/2013
si lo so è identico al naive sort

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:54
Sabato, 16/11/2013
:k:


Il mio blog: https://piero.dev
PM Quote