• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie tablicy dwuwymiarowej

Object Storage Arubacloud
0 głosów
590 wizyt
pytanie zadane 21 maja 2019 w C i C++ przez dudduss76 Początkujący (280 p.)
Witam mam taki problem muszę posortować tablice dwuwymiarową nie mogę przepisać jej do tablicy jednowymiarowej oraz nie mogę wykorzystywać wbudowanych algorytmów. Moim pytaniem jest czy istnieje jakaś implementacja np algorytmu qsort lub innego oprócz tych najprostszych bombelkowe czy przez wybieranie,  które zrealizują to sortowanie?
komentarz 21 maja 2019 przez mokrowski Mędrzec (155,460 p.)
Jak pokażesz jak definiujesz tę tablicę 2-wymiarową, to będzie można pomóc. W C czy C++ można ją definiować na kilka sposobów.

1 odpowiedź

0 głosów
odpowiedź 21 maja 2019 przez dudduss76 Początkujący (280 p.)
#include <iostream>

using namespace std;
void sortowanieDwuWymiarowe(int arr[][5], const int firstSize, const int secoundSize);
int main()
{
    const int ONESIZE = 4;
    const int TWOSIZE = 5;
    int arr[ONESIZE][TWOSIZE] = {0};
    for(int i = 0; i < ONESIZE; i++) {
        for(int j = 0; j < TWOSIZE; j++) {
            cin>>arr[i][j];
        }
    }
    cout<<endl;
    sortowanieDwuWymiarowe(arr, ONESIZE, TWOSIZE);

    for(int i = 0; i < ONESIZE; i++) {
        for(int j = 0; j < TWOSIZE; j++) {
            cout<<arr[i][j]<<" ";
        }
    }
    return 0;
}

void Qsort(int arr[][5], int first, int last) {
    if(first > last) {
        return;
    }
    int left = first, right = last+1;
    int pivot = arr[first/5][first%5];
    while(true) {
        do {
            left++;
        }while(left <= last and arr[left/5][left%5] < pivot);
        do {
            right--;
        }while(arr[right/5][right%5] > pivot);

        if(left > right) {
            break;
        }
        swap(arr[left/5][left%5],arr[right/5][right%5]);
    }
    swap(arr[first/5][first%5],arr[right/5][right%5]);

    first++;
    Qsort(arr,first,right - 1);
    Qsort(arr,right + 1,last - 1);
}

void sortowanieDwuWymiarowe(int arr[][5], const int firstSize, const int secoundSize) {
    Qsort(arr,0, firstSize*secoundSize-1);
}

Aktualnie mam coś takiego i działa to dla danych wprowadzanych od końca np 20,19,18,...,3,2,1 lecz dla typowo losowych danych już przestaje działać

 

komentarz 21 maja 2019 przez mrspock1 Mądrala (6,420 p.)
Do zwykłej procedury sortowania, w miejsce adresowania elementu tablicy np. tablica[3] wstawiasz funkcję na przykład tablica2D[3] która ci wylicza rząd i kolumnę w bardzo prosty sposób. Dzielisz z resztą i masz rząd a reszta z dzielenia to kolumna. Tylko dopasuj sobie dokładnie brzegi zakresu żeby się zgadzały obliczenia.

Podobne pytania

0 głosów
0 odpowiedzi 1,025 wizyt
pytanie zadane 22 maja 2019 w C i C++ przez resu Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 762 wizyt
pytanie zadane 14 stycznia 2018 w C i C++ przez dudus01 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 193 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...