तो, मैं अपने कार्यक्रम के लिए एक सॉर्टिंग लूप लिख रहा हूं। यह स्वचालित रूप से 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;
}
}
}
}
}
यह वह आउटपुट है जो मुझे दूसरे संस्करण के लिए मिलता है ...
तत्व ०: ४२५३६३२
०.०८०७३ सेकंड के बाद वापसी मूल्य के साथ प्रक्रिया से बाहर निकल गया ० जारी रखने के लिए कोई भी कुंजी दबाएं। . .
मदद की सराहना की
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);
}
}
यहाँ एक बहुत आसान तरीका है:
#include <algorithm>
std::sort(std::begin(teams), std::end(teams),
[](const Team& left, const Team& right) {
return left.wins < right.wins;
});
C++20 समाधान (अपरीक्षित कोड)
ranges::sort(std::begin(teams), std::end(teams), &Team::wins);
मैंने इसके लिए इतना लंबा इंतजार किया है ... यह काम भी कर सकता है
ranges::sort(teams, &Team::wins);
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।