Cần giúp đỡ về thuật toán quick sort

chào mọi người ạ, em đang cài đặt một thuật toán Quick_sort để sắp xếp một dãy số, với trị giữa là median của dãy số đó. Tuy nhiên sau khi viết hàm findMedian thì code của em không chạy được nữa(mặc dù compile không báo lỗi).

#include <iostream>
using namespace std;

void Swap(int &a, int &b){
    int temp = a;
    a = b;
    b =temp;
}

int findMedian(int a[], int r, int &x){
    if(r%2 != 0){
        x = a[r/2]; 
        return x;
    }
    else{
        x = (a[(r-1)/2]+a[r/2])/2;
        return x;
    }
}

void QuickSort(int a[], int l, int r){
    int i, j;
    int x;
    findMedian(a,r,x);
    i = l; j = r;
    do{
        while(a[i] < x) i++;
        while(a[j] > x) j--;
        if(i <= j){
            Swap(a[i], a[j]);
            i++; j--;
        }
    }while(i <  j);
    if(l < j)
        QuickSort(a,l,j);
    if(i < r)
        QuickSort(a,i,r);
}
void Input(int a[], int n){
    for(int i = 0; i < n; i++) {
        cout << "a[" << i << "]: ";
        cin >> a[i];
    }
}
void Output(int a[],int l, int n) {
    for(int i = 0; i < n; i++) {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    cout<<"Tri giua: "<<a[n/2];
}
int main() {
    int a[10];
    int n;
    while(1) {
    cout << "Nhap n:";
    cin >> n;
    Input(a, n);
    QuickSort(a,0,n-1);
    Output(a,0,n);
    cout << endl;
    }
    return 0;
}

em mong mọi người xem giúp code sai chỗ nào ạ, em xin cảm ơn mn rất nhiều!

bạn dùng đệ quy không lối thoát nên bị stack over flow đó, mình sửa lại 2 hàm cho bạn:

int findMedian(int a[], int r){
    if(r%2 != 0){
        return a[r/2]; 
    }
    else{
        return (a[(r-1)/2]+a[r/2])/2;
    }
}

void QuickSort(int a[], int l, int r){
    int i, j;
    i = l; j = r;
    do{
        while(a[i] < findMedian(a,r)) i++;
        while(a[j] > findMedian(a,r)) j--;
        if(i <= j){
            Swap(a[i], a[j]);
            i++; j--;
        }
    }while(i <  j);
    if(l < j)
        QuickSort(a,l,j); else return;
    if(i < r)
        QuickSort(a,i,r); else return;
}
3 Likes

cảm ơn bạn rất nhiều! Mình cứ nghĩ điều kiện if là đủ để thoát đệ quy rồi.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?