Gå til innhold

Lage et program som sorterer tall -stigende rekke


Anbefalte innlegg

Hvordan kan man best lage en kode som sorterer tall i stigende rekkefølge? Jeg har klart en grei løsning på det føler jeg men der er det bare 4 tall som er i bildet. Og koden ser forøvrig kanskje hårete ut. Noen forslag til forbedringer eller hvordan jeg skal skrive koden?

 

Du har fått endel forslag nå ser jeg, men slenger med mitt også. :)

 

Her er en måte å gjøre det på.

Denne leser inn 20 verdier og sorterer disse.

endre der det står 20 (4 steder) for å endre antallet.

 

// Sortere 20 verdier
#include <iostream.h>

int main()
{
 int Tab[20];
 int I, Ombytt, Gjem;

 // Inntasting av verdier
 for(I=0; I<20; I++) {
   cout << "\nTast inn verdi " << I+1 << ": ";
   cin >> Tab[I];  cin.ignore();
 }

 // Sortering
 do {
   Ombytt=0;
   for(I=0; I<19; I++)
     if(Tab[I] > Tab[I+1]) {
       Gjem=Tab[I];
       Tab[I]=Tab[I+1];
       Tab[I+1]=Gjem;
       Ombytt=1;
     }
 } while(Ombytt);

 // Utskrift
 cout << "\n\nDen ordnede lista er :\n";
 for(I=0; I<20; I++)
   cout << "  " << Tab[I];
   
 return 0;  
}

Lenke til kommentar
Videoannonse
Annonse
...

Kunne du ha utdypet noe om disse teknikkene? :)

 

 

Nazgul:

Bare for å rante litt videre :p, virker det som om koden min er kjappere på veldig tilfeldige tall. Din vinner helt klart når det er litt mer sammenheng mellom tallene dog.

Har også kuttet ned kodenminlitt og spart noen cycles på det :p

 

Paster koden i morgen for de som bryr seg (ingen? :p)

Endret av Klette
Lenke til kommentar
Kunne du ha utdypet noe om disse teknikkene? :)

 

Ligger masse informasjon om dette ute på nettet.

 

http://aitel.hist.no/fag/alm/lukket/lek03/lek03.pdf

(dansk)(JAVA)http://www.uv.tietgen.dk/edb/laerer/dm1/dm994/syskonst/JAVA/Sortering.htm

http://en.wikipedia.org/wiki/Sorting_algorithm

http://en.wikipedia.org/wiki/Mergesort

http://en.wikipedia.org/wiki/Bubblesort

http://en.wikipedia.org/wiki/Quicksort

 

 

Mange gode artikler på Wikipedia om temaet, der finner du også en del kode.

Endret av don_Vito
Lenke til kommentar

Forresten, her er resultatene mine

Med denne koden,

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <ctime>

using namespace std;

template <class T>
void sortc(vector<T>&);

int main()
{
       vector<int> numbers;
       numbers.push_back(3);
       numbers.push_back(5);
       numbers.push_back(2);
       numbers.push_back(4);
       numbers.push_back(1);

       cout << "Data to sort: \n"; 

       for(vector<int>::const_iterator it = numbers.begin(); 
                       it!=numbers.end(); it++)
               cout << (*it) << " ";
       cout << endl;

       cout << "Sorting... \n";
       sortc(numbers);

       for(vector<int>::const_iterator it = numbers.begin(); 
                       it!=numbers.end(); it++)
               cout << (*it) << " ";
       cout << endl;

       return 0;
}

template <class T>
void sortc(vector<T>& con)
{
       for(int j = con.size()-1; j !=0; --j) {
               for(int i = con.size()-1; i !=0; --i) 
                       if(con[i] < con[i-1])
                       swap(con[i], con[i-1]); }
}

... fikk jeg dette når jeg kjører programmet med time..

$ time ./sorter

Data to sort:

3 5 2 4 1

Sorting...

3 5 2 4 1

 

real    0m0.003s

user    0m0.001s

sys    0m0.002s

På Gentoo'en min.

Endret av zirener
Lenke til kommentar

Hvordan gjorde du det, Klette? :p

Edit:

Testa med 2000 og 500000 nå:

//...
int main()
{
    vector<int> numbers;
    int num;
    srand(time(0));
    for(int i = 0; i != 2000; i++) 
         numbers.push_back(rand());
//osv.

og fikk

$ time ./sort

(...)

 

real    0m0.396s

user    0m0.395s

sys    0m0.001s

 

Edit: Slik

Endret av zirener
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...