21. februar 2006 - 10:30Der er
17 kommentarer og 2 løsninger
hjælp til talsortering i c++
Hej, jeg er i gang med lave et program der skal kunne sortere tal i en rækkefølge, således at de mindste tal skal være de første i rækkefølgen. (f.eks. 10 – 5 – 1 – 1000, skal sorteres til 1 – 5 - 10 – 1000) Det meste af programmet er lavet, men mangler de sidste ting som jeg ikke helt kan finde ud af, er det noget i kan hjælpe med?
Måske skal man benytte bubblesort metoden, har dog ingen erfaring med det, c++ er meget nyt for mig.. Her ses koden: -------------------------------------------------------- #include <cstdlib> #include <iostream>
using namespace std; int main() { int tal[10]; int start = 0; int check = 1; int tmp; int n = 10; int i;
return 0; } void bubbleSort1(int x[], int n) { for (int pass=1; pass < n; pass++) { // count how many times // This next loop becomes shorter and shorter for (int i=0; i < n-pass; i++) { if (x[i] > x[i+1]) { // exchange elements int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp; } } } }
Mange tak for jeres svar, mollevp-> selve programmet virker og kan sortere tallene i en rigtig rækkefølge. jkp-> Kan se der ingen cout er, har prøvet at tilføje cout, men rækkefølgen ser ikke helt rigtigt ud. Har du mulighed for at finde fejlen ? for vil meget gerne benytte begge eksempler..
Jeg sad og prøvede noget lignende igår, dog med en vector og ikke et array. Jeg fandt frem til sort-algorithmen, måske du kan bruge noget af min kode. Den gemmer tallene, brugeren taste i s, indtil det ikke er en gyldig double-værdi:
i skal have mange tak, som jeg skrev før er prgrammering rimelig nyt for mig, kan i evt. forklare algoritmen, se vengligst flg. link-> http://www.alarmbasen.dk/cplus.bmp
Det er såmænd temmelig enkelt, std::sort(s.begin(), s.end()); starter med at sortere fra s.begin() og slutter ved s.end(), og så ændrer den på positionerne i vectoren, så det mindste tal ligger i s[0], og det største i s[size-1].
while(check) { // Sålænge 2 tal er blevet byttet rundt ++loops; // Tæl antallet af gennemløb op check = 0; // Nulstil for(int i=0; i<n-1; ++i) { // For hver element i listen if(tal[i] > tal[i+1]){ // Hvis det første tal er større end det næste (sammenligner først 1 og 2, så 2 og 3, så 3 og 4 osv.) tmp = tal[i]; // Byt tallene (denne + 2 næste linier) tal[i] = tal[i+1]; tal[i+1] = tmp; ++i; // FJERN DENNE LINIE, DET VAR EN FEJL check = 1; // Sæt et flag betydende at vi har byttet 2 tal (altså at der måske stadig er tal der skal byttes) } } }
jpk-> hvilken sorteringsalgoritem benytter den kode du har lavegt ? tror ikke helt det kan passe med kun 7 gennemløb, hvis det var tilfældet vil den ikke kunne sortere tallene i den rigtige rækkefølge...
void merge(int data[], int n1, int n2) { int copyN1 = 0; // Tæller til at holde styr på hvor vi er i n1 delen af array Data int copyN2 = 0; // Tæller til at holde styr på hvor vi er i n2 delen af array Data int copy = 0; // Tæller til at holde styr på hvor vi er i array Temp int *temp; temp = new int [n1+n2];
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.