2011-02-24 18 views
7

यदि मेरे पास उपयोगकर्ता 10 यादृच्छिक संख्या दर्ज करता है और मैं उन्हें सबसे बुनियादी सी ++ भाषा का उपयोग करके ऐसा करने का सबसे अच्छा तरीका क्या करना चाहता हूं।सी ++ सॉर्टिंग नंबर सबसे छोटे से सबसे बड़े

+5

सुझाव: http://www.cplusplus.com/referen सीई/एल्गोरिदम/सॉर्ट/ –

उत्तर

13
#include <vector> 
#include <iostream> 
#include <algorithm> 

using namespace std; 

int main() { 

    vector<int> vec; 

    vec.push_back(1); 
    vec.push_back(4); 
    vec.push_back(3); 
    vec.push_back(2); 

    sort(vec.begin(), vec.end()); 

    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) { 
     cout << *it << " "; 
    } 
    cout << endl; 
    return 0; 
} 
-7

आप कुछ लिख सकते हैं, लेकिन वास्तव में qsort फ़ंक्शन का उपयोग करना चाहिए।

+8

इसके विपरीत काफी। सी ++ में शायद ही कभी (कभी नहीं?) 'Qsort' का उपयोग करने का एक अच्छा कारण है। –

+3

यदि आप @ जेरी की टिप्पणी को विस्तृत करने के लिए प्रश्न सी (+ सी ++ नहीं) –

+5

पर चिह्नित किया गया था, तो आपको सही होगा यदि आपको @ std :: sort' का उपयोग करना चाहिए। – jalf

20
std::vector<int> numbers; 

// get the numbers from the user here.  

std::sort(numbers.begin(), numbers.end()); 
+0

@ जेरी: ऑर्डरिंग बनाए रखने वाली संरचना का उपयोग क्यों न करें? –

+1

@Matthieu: अंत में बस एक बार सॉर्ट करने की संभावना तेज है। –

+0

@ kotlinski: जबकि मैं इसके साथ सहमत हूं, और छोटे इनपुट सेट के लिए 'वेक्टर' का उपयोग करके, यह एक समयपूर्व अनुकूलन प्रतीत होता है! Asymptotic प्रदर्शन बराबर ओ (एन लॉग एन) है, तो आप कोड जटिल करने की लागत पर, निरंतर कारक के लिए जा रहे हैं। –

0

यह आपकी आवश्यकताओं पर निर्भर करता है। यदि आप उन्हें क्रमबद्ध करना चाहते हैं, और गति केवल मध्यम चिंता का विषय है, तो इस तरह के छोटे एन-वैल्यू (10) के लिए एक सम्मिलन प्रकार ठीक होगा। लागू करने के लिए त्वरित (स्क्रैच से), और छोटे सेट आकार के लिए उपयुक्त है।

2

एक संरचना है कि का कहना है का उपयोग करें आदेश: std::multiset

#include <iostream> 
#include <set> 

#include <boost/lexical_cast.hpp> 

int main(int argc, char* argv[]) 
{ 
    std::multiset<int> set; 

    for (int i = 1; i != argc; ++i) { 
    set.insert(boost::lexical_cast<int>(argv[i])); 
    } 

    for (int i: set) { std::cout << i << " "; } 
    std::cout << "\n"; 
} 

प्रार्थना:

$ yourprogram 1 5 4 6 7 82 6 7 8 

(नोट: तर्क की संख्या सीमित नहीं है)

+0

'के लिए (int i: set) 'जो मुझे C++ जैसा नहीं दिखता है। –

+1

@ kotlinski: सी ++ 0x नई 'श्रेणी' कथन के लिए आधारित (** 6.5.4 [stmt.ranged] **), मुझे नहीं पता कि कोई संकलक पहले से ही इसे लागू कर रहा है या नहीं। –

0
//this is sorting min--->max without pointers 
    #include<iostream> 
    using namespace std; 
    int main() 
    {int n; 
    cout<<"How much numbers you wanna sort? "<<endl; 
    cin>>n; 
    int broj[n]; 
    cout<<"Enter numbers: "<<endl; 
    for(int k=0;k<n;k++) 
    { 
    cin>>broj[k]; 
    } 
    int min=0; 
    for(int z=0;z<n;z++) 
    { 
    loop: 
    min=broj[z]; 

    for(int i=z;i<n;i++) 
    { 
     if(min<=broj[i]) 
     { 
     } 
     else 
     { 
      min=broj[i]; 
      broj[i]=broj[z]; 
      broj[z]=min; 
      goto loop;   
     } 
    } 
    } 
    cout<<endl<<"--------------"<<endl; 
    for(int j=0;j<n;j++) 
    { 
    cout<<broj[j]<<endl; 
    } 
    return 0; 
    } 
+0

कुछ स्पष्टीकरण –

+1

जोड़ने का प्रयास करें, इसलिए यह सिर्फ पुराना स्कूल प्रोग्राम है, केवल अगर, और गोटो लूप के साथ .. इसलिए इस प्रोग्राम का मूल लूप के लिए "i" में है जो सरणी पर विभिन्न इंडेक्स पर संख्याओं को प्रतिस्थापित करता है .min is variable जिसे हम उन मूल्यों के आसान "परिवहन" के लिए उपयोग करते हैं .. मेरी सभी सलाह में यदि आपके पास विजुअल स्टूडियो या कुछ प्रोग्राम है जो इसे चलाने के दौरान चरण-दर-चरण (लाइन द्वारा लाइन) पर जा सकते हैं, तो यह आपको इस अवधारणा को समझने में मदद करेगा। ..यह थोड़ा लंबा है लेकिन इसके साथ आप सोचने के अपने प्रोग्रामिंग तरीके को विकसित करेंगे –

संबंधित मुद्दे