Εργαστήριο Τεχνολογίας Λογισμικού
0 votes
262 views

Θα ήθελα να ταξινομήσω έναν πίνακα με ακέραιους αριθμούς σε αύξουσα σειρά και για αυτό χρησιμοποίησα (ουσιαστικά αντέγραψα ;-; ) από τις διαφάνειες του μαθήματος την μέθοδο quicksort. Παρόλα αυτά, ο πίνακας τυπώνεται χωρίς καμία αλλαγή. Άλλαξα τις ονομασίες swap και partition γιατί το CodeBlocks τις χρωμάτιζε ως δηλωμένες λέξεις.

#include <cstdio>

void swaping(int &x, int &y){
  int save = x;
  x = y;
  y = save;
}

int partitioning(int A[], int first, int last){
  int x = A[(first + last)/2];
  int i = first, j=last;

  while(true){
    while (A[i] < x) i++;
    while (x < A[j]) j--;
    if (i >= j) break;
    swaping(A[i], A[j]);
    i++;
    j--;
  }
  return j;
}

void quicksort(int A[], int first, int last){
  if(first >= last) return;

  int i = partitioning(A, first, last);
  quicksort(A, first, i);
  quicksort(A, i+1, last);
}

int main(){
  int N;
  scanf("%d", &N);
  int A[N];

  for(int i=0; i<N; i++)
    scanf("%d", &A[i]);

  quicksort(A, A[0], A[N-1]);

  for(int i=0; i<N; i++){
    printf("%d", A[i]);
    printf(" ");
  }
}
in progintro by (540 points)
edited by | 262 views
0

Δεν καλείς σωστά την quicksort. Έχεις κάνει λάθος υπόθεση όσον αφορά το τί είναι τα first και last.

0

Τα στοιχεία του πίνακα στην κλήση εννοείτε;

0

Ετούτο quicksort(A, A[0], A[N-1]); είναι λάθος. Μπορώ να σου πω και με ακρίβεια, αλλά ίσως θες να το βρεις μόνος σου.

Edit: Ναι, το λάθος έχει να κάνει με τα A[0], A[N-1].

0

Οκοκοκοκ ευχαριστώ πολύ, θα το προσπαθήσω μόνος μου αρχικά.

Please log in or register to answer this question.

301 questions

289 answers

288 comments

903 users