Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie przez selekcje w C
Forum PHP.pl > Inne > Hydepark
maciu
Ma ktoś z Was algorytm sortowania przez selekcje w C. Byłbym bardzo wdzięczny za pomoc.
matys
Mam tu definicje tego algorytmu, jak troch pomyslisz powinieneś go zakodować;)
Kod
Metoda ta nazywana jest sortowaniem przez wymianę gdyż na początku szukany jest najmniejszy element, po znalezieniu go jest on zamieniany z pierwszym elementem tablicy.

Następnie szukany jest znów najmniejszy element, ale począwszy od elementu drugiego (pierwszy - najmniejszy jest już wstawiony na odpowiednie miejsce), po jego znalezieniu jest on zamieniany z drugim elementem. Czynność tą powtarzamy kolejno na elementach od trzeciego, czwartego, aż do n-tego.
maciu
ja znalazłem troche inną definicje sortowania przez selekcje:

mamy przykładową liste
1 6 3 5 4
Wybieramy skrajny element, powiedzmy maksimum (6) i przepinamy ten element do nowej listy.
1 3 5 4
6
Po przepięciu, wybieramy kolejne maksimum pierwszej listy i znowu przepinamy do drugiej. Ponieważ wybraliśmy maksimum musimy elementy przepinać zawsze na początek nowej listy. Jak wzięlibyśmy minima to byśmy ustawiali na końcu. Byśmy potrzebowali wtedy dodatkowego wkaźnika na koniec listy.
1 3 4
5 6
Tak sobie przepinamy te maksima, aż pierwsza lista zostanie pusta.

1 3 4 5 6
Wtedy przepinamy pierwszą liste tak, że pierwsza lista jest posortowana.

metody te troszkę się od siebie różnią . Jedna kożysta z jednej listy, druga z dwóch. I którą z tych metod można uznać za "sortowanie przez selekcje"? Czy oby dwie metody się kwalifikują do takiego rodzaju sortowania?
matys
Tutaj masz gotowy kod sortowania prez selekcje napisany w C++:
Kod
#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

void selectionsort(int tablica[10], int ile_liczb)

{

int min,i,j,temp;

for (i=0;i<ile_liczb-1;i++)

    {

   min=i;

   for (j=i+1;j<ile_liczb;j++)

    if (tablica[j]<tablica[min]) min=j;

   temp=tablica[min];

   tablica[min]=tablica[i];

   tablica[i]=temp;

   }

printf("nTablica po posortowaniu:");

   for(i=0; i<ile_liczb; i++) printf("n%i",tablica[i]);

}

void main(void)

{

int ile_liczb,i,liczba;

int tablica[10];

clrscr();

printf("Ile liczb chesz posortowac (do 10) ? ");

scanf("%i",&ile_liczb);

for(i=0; i<ile_liczb; i++)

     {

   printf("Wprowadz liczbe #%i: ",i+1);

   scanf("%i",&liczba);

   tablica[i]=liczba;

   }

clrscr();

printf("Tablica przed posortowaniem:");

   for(i=0; i<ile_liczb; i++) printf("n%i",tablica[i]);

selectionsort(tablica,ile_liczb);

printf("nDowolny klawisz...");

getch();

}


Jednak jeśli chodzi o mnie uzywam w C++ innego sortowania, a mianowicie "sortowania babelkowego"
tutaj masz kod:
Kod
#include <iostream>

#include <stdlib.h>



int main()

{

int i,k,j;

int tablica[] = {40, 2, 5, 18, 20, 16, 4};

for(i=1; i=7; i++)

  

    for(j=6; j>=i; j--)

    

    if (tablica[j]<tablica[j-1])

    {

    k=tablica[j-1];

    tablica[j-1]=tablica[j];

    tablica[j]=k;

    

    }

  

  

for(i=0; i<7; i++)

{

cout << tablica[i];

}

    

   system("PAUSE");

  return 0;

}

W tym kodzie moze byc jakis błąd biggrin.gif bo szybko pisałem....
maciu
mółbyś wytłumaczyć do czego służą funkcje getch() oraz clrscr();
matys
Gunkcje clrscr(); usuń, jest niepotrzebna, natomiast funkcja getch() pobiera stan klaisza na klawiaturze;)Czyli jak wciśniesz jakiś przyccik to ona to pobiera i kończy działanie programu;)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.