Sortowanie tablicy

0

Witam wszystkich forumowiczów. Czy ktoś mógłby zobaczyć co jest nie tak z tym algorytmem. Chciałem posortować tablicę. (Zależy mi na poprawieniu tego, bo wiadomo, że można to posortować za pomocą innego algorytmu.) Dziękuję bardzo za pomoc.

public void sortowanie()
{
    int najmniejszaWartosc=tablica[0]; //przechowuje najmniejszą wartość wybraną z aktualnego przejścia.
    int numer=0;    //przechowuje numer elementu tablicy w której wystąpiła najmniejsza wartość.
    int bufor=0;   //bufor w którym następuje zamiana pomiędzy elementami


    for(int j=0;j<tablica.length;j++)
    {


      for (int i = j+1; i <tablica.length; i++)
      {

          if (tablica[i] <najmniejszaWartosc )
          {
              najmniejszaWartosc = tablica[i];
              numer=i;
          }
      }

//pierwsza pętla wybiera najmniejszą wartość z całej tablicy i zapisuje ją do zmiennej "najmniejszaWartosc".
// Do tego momentu wszystko działa.


//tutaj powinna nastąpić zamiana jeśli najmniejsza wartość z poprzedniej pętli for jest mniejsza 
// od wartosci tablicy o indeksie j. Niestety algorytm nie działa.
        
 if ( najmniejszaWartosc< tablica[j])
 {
        bufor = tablica[j];
        tablica[j] = najmniejszaWartosc;
        tablica[numer] = bufor;
 }


  }
1

Ten algorytm nic nie sortuje - popatrz sobie na różne implementacje np. sortowania bąbelkowego, będzie prościej niż tłumaczyć od zera coś implementowanego setki razy każdego dnia :-)

1

Mi to wygląda jakbyś chciał zrobić sortowanie przez wybieranie:

#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

void selection_sort(int n, int t[]);

int main(void)
{
   int tab[20];
   srand(time(NULL));
   for(int i=0; i<20; i++) {
      tab[i] = rand()%100;
      cout << tab[i] << " ";
   }
   cout << endl;
   selection_sort(20, tab);
   for(int i=0; i<20; i++) cout << tab[i] << " ";
   cout << endl;
   return 0;
}

void selection_sort(int n, int t[])
{
   int i, j, k;
   for(i=0; i<n; i++) {
      k=i;
      for(j=i+1; j<n; j++) if(t[j]<t[k]) k=j;
      swap(t[k], t[i]);
   }
}

Kod skopiowany z Wikipedii

0

Nie zerżnąłem z neta ani jednej linijki. Chciałem po prostu sam napisać algorytm który będzie sortował. Bo co to za problem przekleić algorytm kogoś innego i nic z niego nie rozumieć. Ale dziękuję osobom, które dały mi tutaj jakieś sensowne wskazówki.

0
mac2156 napisał(a):

Chciałem po prostu sam napisać algorytm który będzie sortował

Niestety nie napisałeś który algorytm sortowania chciałeś zaimplementować a algorytmów sortowania jest wiele. Np

Algorytm [sortowania przez wybieranie] przedstawia się następująco:

  1. wyszukaj minimalną wartość z tablicy spośród elementów od i do końca tablicy
  2. zamień wartość minimalną, z elementem na pozycji i
0

Tak jak napisałeś chodziło mi o sortowanie przez wybieranie.

  Algorytm [sortowania przez wybieranie] przedstawia się następująco:

   1. wyszukaj minimalną wartość z tablicy spośród elementów od i do końca tablicy
   2. zamień wartość minimalną, z elementem na pozycji i

Wewnętrzna pętla for znajduje najmniejszą wartość tablicy. Działa bo sprawdzałem na różnych wartościach.
Nie działa tylko drugi punkt "2. zamień wartość minimalną, z elementem na pozycji i"

0

Ok, Już chyba zrozumiałem to sortowanie. Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1