Peršokti į turinį

Pagalbos dėl dvigubo išrinkimo metodo


MrGytis

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1975 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki, taigi programai turiu padaryti dvigubo išrinkimo metodą (Double selection sort). Ir pagal mano parašyta kodą masyvo elementai yra išrikiuojami ne taip kaip turėtų. Tai galbūt jūs rasite kas su mano kodu yra negerai ir tikiuosi, jog pavyks išspręsti problemą.
 

   void dvigelementrink (int n, int i)
    {
    int Temp;
    for(i=0;i<n/2;i++)
    {
    int minimum = i;
    int maximum = i;
    for(int j=i+1;j<n-i;j++)
    {
    if (B[minimum]>B[j])
    minimum=j;
    if (B[maximum]<B[j])
    maximum = j;
    }
    Temp = B[i];
    B[i] = B[minimum];
    B[minimum] = Temp;
    Temp = B[n-1-i];
    B[n-1-i] = B[maximum];
    B[maximum] = Temp;
    n = n-1-i;
    }
    for (i=0;i<n;i++);
    }

 

Nuoroda į komentarą
Dalintis per kitą puslapį

#include <iostream>

void DSS( int *arr, const unsigned n ) {
    unsigned max = 0;
    unsigned min = 0;

    for ( unsigned i = 0; i < n / 2; max = min = ++i ) {
        for ( unsigned j = i + 1; j < n - i; ++j ) {
            if ( arr[ j ] >= arr[ max ] ) {
                max = j;
            }
            
            if ( arr[ j ] < arr[ min ] ) {
                min = j;
            }
        }

        std::swap( arr[ i ], arr[ min ] );
        std::swap( arr[ n - i - 1 ], arr[ ( max == i ? min : max ) ] );
    }
}

int main() {
    int arr[]           = { 5, 4, 7, 1, 10, 11, 27, 2, 34, 3 };
    const unsigned n    = sizeof( arr ) / sizeof( int );

    DSS( arr, n );

    for ( unsigned i = 0; n != i; ++i ) {
        std::cout << arr[ i ] << std::endl;
    }

    return 0;
}

https://stackoverflow.com/questions/45892516/algorithms-are-double-ended-selection-sorts-really-faster-than-single-ended-on

Redaguota , nario don't be so cynical
  • Teigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

8 minutes prieš, don't be so cynical parašė:

#include <iostream>

void DSS( int *arr, const unsigned n ) {
    unsigned max = 0;
    unsigned min = 0;

    for ( unsigned i = 0; i < n / 2; max = min = ++i ) {
        for ( unsigned j = i + 1; j < n - i; ++j ) {
            if ( arr[ j ] >= arr[ max ] ) {
                max = j;
            }
            
            if ( arr[ j ] < arr[ min ] ) {
                min = j;
            }
        }

        std::swap( arr[ i ], arr[ min ] );

        if ( max == i ) {
            max = min;
        }

        std::swap( arr[ n - i - 1 ], arr[ max ] );
    }
}

int main() {
    int arr[]           = { 5, 4, 7, 1, 10, 11, 27, 2, 34, 3 };
    const unsigned n    = sizeof( arr ) / sizeof( int );

    DSS( arr, n );

    for ( unsigned i = 0; n != i; ++i ) {
        std::cout << arr[ i ] << std::endl;
    }

    return 0;
}

https://stackoverflow.com/questions/45892516/algorithms-are-double-ended-selection-sorts-really-faster-than-single-ended-on

Dėkui. Veikia programa dabar. :)

Nuoroda į komentarą
Dalintis per kitą puslapį

  • d0Se užrakino šią temą

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1975 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.

Skelbimai


×
×
  • Sukurti naują...