Napisz program, który w tablicy zawierającej liczby nieujemne przesuwa na koniec tablicy wszystkie elementy o wartości 0. Porządek pozostałych elementów tablicy powinien zostać zachowany. Program nie powinien uzywać dodatkowej tablicy podczas przetwarzania danych.

Odpowiedź :

Odpowiedź:

#include <iostream>

#include <algorithm>

int main() {

   int tab[] = {1, 2, 0, 4, 1, 6, 9, 0, 1, 0, 9, 2}; //przykładowa tablica

   int n = sizeof(tab) / sizeof(tab[0]); //liczymy rozmiar tablicy

   std::stable_partition(tab, tab + n,

                         [](int a) { return a != 0; }); //funkcja z <algorithm> przestawiająca zera na koniec tablicy

   for (const auto &num: tab) { //wyswietlanie posortowanej tablicy

       std::cout << num << std::endl;

   }

   std::cout << "Sortowanie babelkowe" << std::endl;

   for (int i = 0; i < n; i++) {

       for (int j = 0; j < n - i - 1; j++) {

           if (tab[j] == 0 && tab[j + 1] != 0) {

               std::swap(tab[j], tab[j + 1]);

           }

       }

   }

   for (const auto &num: tab) {

       std::cout << num << std::endl;

   }

   return 0;

}

Wyjaśnienie:

Zrobiłem na dwa sposoby. Z użyciem funkcji z <algorithm> i zmodyfikowanym sortowaniem bąbelkowym