Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- int porownaj_liczby_normalnie(const int a, const int b){
- if (a==b) return 0;
- if (a>b) return 1;
- return -1;
- }
- int wiecej_jedynek(const int a, const int b){
- int l_a = 0;
- int l_b = 0;
- int temp_a = a;
- int temp_b = b;
- while (temp_a > 0){
- if (temp_a % 10 == 1){
- l_a++;
- }
- temp_a /= 10;
- }
- while(temp_b > 0){
- if(temp_b % 10 == 1){
- l_b++;
- }
- temp_b /= 10;
- }
- if(l_a == l_b) return 0;
- if(l_a > l_b) return 1;
- return -1;
- }
- int wieksza_bezwzgledna(const int a, const int b){
- if(abs(a) == abs(b)) return 0;
- if(abs(a) > abs(b)) return 1;
- return -1;
- }
- int wieksza_pierwsza_cyfra(const int a, const int b){
- int pierwsza_a = a;
- int pierwsza_b = b;
- while (pierwsza_a >= 10) pierwsza_a /=10;
- while (pierwsza_b >= 10) pierwsza_b /=10;
- if (pierwsza_a == pierwsza_b) return porownaj_liczby_normalnie(pierwsza_a, pierwsza_b);
- if (pierwsza_a > pierwsza_b) return 1;
- return -1;
- }
- int (*fabryka_komparatorow(const unsigned i))(const int a,const int b){
- if (i==1) return wiecej_jedynek;
- if (i==2) return wieksza_bezwzgledna;
- if (i==3) return wieksza_pierwsza_cyfra;
- if (i>3) return porownaj_liczby_normalnie;
- return porownaj_liczby_normalnie;
- }
- void sortuj(int (*komparator)(int, int), int* tab, const unsigned n){
- for(int i = 0; i < n; ++i)
- for(int j = 0; j < n - 1; ++j){
- if((*komparator)(tab[j],tab[j+1]) == 1){
- const int tmp_t = tab[j];
- tab[j] = tab[j+1];
- tab[j+1] = tmp_t;
- }
- }
- }
- int main()
- {
- unsigned int n;
- unsigned int fab_k;
- cout << "Podaj rozmiar tablicy: ";
- cin >> n;
- cout << endl;
- int * tab = new int[n];
- for(int i = 0; i < n; ++i){
- tab[i] = (rand() % 2000) - 1000;
- }
- for(int i = 0; i < n; ++i){
- cout << tab[i] << "\t";
- }
- cout << "\nPodaj rodzaj sortowania: \n0 - normalnie\n1 - liczba która ma więcej jedynek\n2 - większa wartość bezwzględna\n3 - większa pierwsza cyfra\n";
- cin >> fab_k;
- sortuj(fabryka_komparatorow(fab_k), tab, n);
- for(int i = 0; i < n; ++i){
- cout << tab[i] << "\t";
- }
- delete [] tab;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement