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ź:
#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