Algorytm Selection Sort – porządkowanie przez wybór
Specyfikacja:
Dane: Liczba naturalna n i ciąg n liczb x1, x2, …, xn
Wynik: Uporządkowane dane ciągu liczb od najmniejszej do największej, czyli ciąg wynikowy spełnia nierówność x1<= x2<= …<= xn (Uwaga! Elementy ciągu danego i wynikowego oznaczamy tak samo, gdyż porządkowanie odbywa się in situ, czyli „w miejscu”. ) Algorytm:
Krok 1: Dla i=1, 2, 3,…, n-1 wykonaj kroki 2 i 3, a następnie zakończ algorytm.
Krok 2: Znajdź k takie, xk jest najmniejszym elementem w ciągu xi,…, xn.
Krok 3: Zamień miejscami elementy xi oraz xk.
Zadanie: Zrealizuj powyższy problem dla wybranego n. Elementy losuj z zakresu
od -50 do 50.
Realizacja w C++ (kompilator Code::Blocks)
#include <iostream> using namespace std; int n; int min_i(int tab[], int od) { int min_in = 0; int min = 1000; for (int i = od; i<n; i++) { if (tab[i]<min) { min_in = i; min = tab[i]; } } return min_in; } int main() { srand(time(NULL)); cout << "Podaj ilosc liczb do posortowania:"; cin >>n; int tab[n]; for (int i = 0 ; i < n ; i ++ ) { tab[i] = rand()%101 -50 ; // losujemy 101 liczb (od -50 do 50) cout.width(2); cout << i <<": " <<tab[i]<<endl; } cout <<endl <<"Po sortowaniu:" << endl; int k; for (int i = 0; i< n-1 ; i++ ) { k = min_i(tab, i); swap(tab[i],tab[k]); } for (int i = 0 ; i < n ; i++ ) { cout.width(2); cout << i <<": " <<tab[i]<<endl; } return 0; }
Brak komentarzy:
Prześlij komentarz