तो, मैं अपने कार्यक्रम के लिए एक सॉर्टिंग लूप लिख रहा हूं। यह स्वचालित रूप से Arrays को सॉर्ट करता है और इसे अतीत में प्रभावशाली ढंग से किया है। कहा जा रहा है, एक बार जब मैंने इसे अपने अमेरिकी फुटबॉल प्रबंधक कार्यक्रम में जोड़ा, तो चीजें इतनी प्रभावी ढंग से नहीं चलीं।

तो नीचे, मैं इस सॉर्टिंग लूप का एक कार्यशील संस्करण प्रदान करूंगा, और फिर फ़ुटबॉल प्रबंधक संस्करण के बाद जो काम नहीं कर रहा है।

यहाँ काम करने वाला है ...

#include <string>
using namespace std;
#include <time.h> 
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#include <stdio.h>



int main()
{
    int i, j,temp;
    int values[10] = { 7, 4, 2, 8, 1, 3, 9, 6, 10, 5 };  // array of 10 'int' values

    int values_count = sizeof(values) / sizeof(int); // 'sizeof' returns the number of 'int' values in the array (10)
cout << values_count;
    printf ("Unsorted...\n");

    for (i = 0; i < values_count; i++)
        printf("element %2d: %2d\n", i, values[i]);

    for (i = 0; i < values_count - 1; i++) // loop from 0 to 8 (the first element is values[0]; 10th is values[9])
    {
        // Compare values[i] with each element from values[i+1] to the values[9] (indexed in the inner loop by 'j').
        // After executing the inner loop, values[i]is now assured to be less than any from values[i+1] to values[9]. 

        for (j = i + 1; j < values_count; j++) // When i=0, loop from 1-9; When i=1, loop from 2-9; When i=2, loop from 3-9, etc.
        {
            // We are sorting to get 'least-to-greatest'. So, any 'values' array elememnt values[j] beyond values[i] 
            // (outer loop) that is greater than values[i] is swapped with the [i] postition in the array

            if (values[j] < values[i])
            {
                temp = values[i];
                values[i] = values[j];
                values[j] = temp;
            }
        }
    }

    printf("\nSorted...\n");

    for (i = 0; i < values_count; i++)
        printf("element %2d: %2d\n", i, values[i]);

    return 0;
}

वही बखूबी काम करता है। यहाँ दूसरा है जो विफल हो रहा है ...

#include <string>
using namespace std;
#include <time.h> 
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
#include <stdio.h>



int main()
{
class Team{
public:
    int wins, losses;
    
};



Team teams[10];
int team_count = 10;
int j, i, temp;

teams[1].wins = 1;
teams[2].wins = 2;
teams[3].wins = 5;
teams[4].wins = 3;
teams[5].wins = 6;
teams[6].wins = 10;
teams[7].wins = 7;
teams[8].wins = 4;
teams[9].wins = 8;
teams[10].wins = 9;

for (i = 0; i < team_count; i++){

    printf("element %2d: %2d\n", i, teams[i].wins);

    for (i = 0; i < team_count - 1; i++) // loop from 0 to 8 (the first element is values[0]; 10th is values[9])
    {
        // Compare values[i] with each element from teams[i+1] to the teams[9] (indexed in the inner loop by 'j').
        // After executing the inner loop, teams[i]is now assured to be less than any from teams[i+1] to teams[9]. 

        for (j = i + 1; j < team_count; j++) // When i=0, loop from 1-9; When i=1, loop from 2-9; When i=2, loop from 3-9, etc.
        {
            // We are sorting to get 'least-to-greatest'. So, any 'teams' array elememnt teams[j] beyond teams[i] 
            // (outer loop) that is greater than teams[i] is swapped with the [i] postition in the array

            if (teams[j].wins < teams[i].wins)
            {
                temp = teams[i].wins;
                teams[i].wins = teams[j].wins;
                teams[j].wins = temp;
            }
        }
    }
}









}

यह वह आउटपुट है जो मुझे दूसरे संस्करण के लिए मिलता है ...

तत्व ०: ४२५३६३२


०.०८०७३ सेकंड के बाद वापसी मूल्य के साथ प्रक्रिया से बाहर निकल गया ० जारी रखने के लिए कोई भी कुंजी दबाएं। . .

मदद की सराहना की

c++
-1
Troy Cox 24 अक्टूबर 2020, 04:33

3 जवाब

सबसे बढ़िया उत्तर

यहाँ दूसरे कोड की समस्याएं हैं:

  • गैर-मानक अप्रयुक्त शीर्षलेख शामिल हैं और वे कोड को कुछ परिवेशों में काम करने से रोक रहे हैं।
  • teams[0].wins बिना इनिशियलाइज़ किए इस्तेमाल किया जाता है।
  • teams[10].wins = 9; खतरनाक सीमा से बाहर पहुंच का कारण बनता है।
  • छँटाई दिनचर्या गलती से मुद्रण दिनचर्या में डाल दी जाती है।
  • केवल wins को क्रमबद्ध किया जाता है, losses को नहीं, और यह जानकारी को तोड़ देगा।

ये कोशिश करें:

#include <stdio.h>

int main()
{
    class Team{
    public:
        int wins, losses;
        
    };

    Team teams[10];
    int team_count = 10;
    int j, i;

    teams[0].wins = 1;
    teams[1].wins = 2;
    teams[2].wins = 5;
    teams[3].wins = 3;
    teams[4].wins = 6;
    teams[5].wins = 10;
    teams[6].wins = 7;
    teams[7].wins = 4;
    teams[8].wins = 8;
    teams[9].wins = 9;

    for (i = 0; i < team_count; i++){
        printf("element %2d: %2d\n", i, teams[i].wins);
    }

    for (i = 0; i < team_count - 1; i++) // loop from 0 to 8 (the first element is values[0]; 10th is values[9])
    {
        // Compare values[i] with each element from teams[i+1] to the teams[9] (indexed in the inner loop by 'j').
        // After executing the inner loop, teams[i]is now assured to be less than any from teams[i+1] to teams[9]. 

        for (j = i + 1; j < team_count; j++) // When i=0, loop from 1-9; When i=1, loop from 2-9; When i=2, loop from 3-9, etc.
        {
            // We are sorting to get 'least-to-greatest'. So, any 'teams' array elememnt teams[j] beyond teams[i] 
            // (outer loop) that is greater than teams[i] is swapped with the [i] postition in the array

            if (teams[j].wins < teams[i].wins)
            {
                Team temp = teams[i];
                teams[i] = teams[j];
                teams[j] = temp;
            }
        }
    }

    for (i = 0; i < team_count; i++){
        printf("element %2d: %2d\n", i, teams[i].wins);
    }

}
0
MikeCAT 24 अक्टूबर 2020, 04:46

यहाँ एक बहुत आसान तरीका है:

#include <algorithm>

std::sort(std::begin(teams), std::end(teams),
    [](const Team& left, const Team& right) {
        return left.wins < right.wins;
    });
1
John Zwinck 24 अक्टूबर 2020, 04:38

C++20 समाधान (अपरीक्षित कोड)

ranges::sort(std::begin(teams), std::end(teams), &Team::wins);

मैंने इसके लिए इतना लंबा इंतजार किया है ... यह काम भी कर सकता है

ranges::sort(teams, &Team::wins);
0
Surt 24 अक्टूबर 2020, 05:16