Avatar billede snowball Novice
23. juni 1999 - 14:19 Der er 3 kommentarer og
1 løsning

Hvorfor crasher dette program ?¿?¿

#define MAX 10
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void quick_sort(int vektor[], int venstre, int hoejre);

void main(void)

{

  int i, vektor[MAX];

  randomize();
  printf("\n Denne vektor skal sorteres: ");
  for(i = 0; i < MAX; i++)
    printf("\n %d", vektor[i] = random(1000));

  quick_sort(vektor, 0, MAX - 1);
  printf("\n Den sorterede vektor: ");
  for(i = 0; i < MAX; i++)
    printf("\n %d", vektor[i]);

  getch();

}

void quick_sort(int vektor[], int venstre, int hoejre)

{

  int midt, l, h, temp;

  l = venstre;
  h = hoejre;
  midt = vektor[(1 + h) / 2];

  do

  {

    while(vektor[l] < midt)
      l++;

    while(vektor[h] > midt)
      h--;

    if(l <= h)

    {

      temp = vektor[l];
      vektor[l] = vektor[h];
      vektor[h] = temp;
      l++, h--;

    }

  }


  while(l <= h);
    if(venstre < h)
      quick_sort(vektor, venstre, h);

    if( l < hoejre)
      quick_sort(vektor, 1, hoejre);


}
Avatar billede snowball Novice
25. juni 1999 - 09:11 #1
Fejlen er fundet. #define MAX må ikke være over 4. Hvorfor aner jeg ikke ?¿?¿

Snowball
Avatar billede bjarke Nybegynder
18. juli 1999 - 20:52 #2
Hej snowball!

Nej, MAX må gerne være over 4. Det er et tilfælde, at der virker med MAX<=4. 15 points appelerer ikke til den store arbejdsindsats, men jeg kan da fortælle at så vidt jeg kan "læse din tankegang", så er din sorteringsalgoritme forkert. Prøv f.eks. at gennemgå nogle eksempler i hånden og se hvad der sker.

V.h. Bjarke

PS: Har du iøvrigt fået det til at virke med MAX>4 ?
Avatar billede soepro Nybegynder
21. juli 1999 - 22:27 #3
Jeg har et QSORT program der virker på input filer op til 4 GB, herunder en ikke rekursivt kodet QSORT algoritme. Programmet laver også en merge sort. I øvrigt indeholder bl.a. Turbo C en indbygget qsort algoritme (på tabeller mindre end 64 KB)- hvorfor anvender du ikke den ?
Avatar billede hopeful Nybegynder
22. juli 1999 - 23:12 #4
while(l <= h);

Hér laver du vist en uendelig loop!
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester