এই প্রোগ্রামটায় ৪ সংখ্যার বেশি input দিলে প্রোগ্রামটি ক্রাশ করছে কেন বুঝতেছি না ।

void quicksort(int arr[],int left,int right)
{
    int temp,pivot,i,j;
    i = left;
    j = right;
    pivot = arr[left+right/2];

    //partition
    while(i<=j){
        while(arr[i] < pivot){
            i++;
        }
        while(arr[j] > pivot){
            j--;
        }
        if(i <= j)
        {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++; j--;
        }
    }
    //recursion
    if(left < j)
    {
        quicksort(arr,left,j);
    }
    if(i < right){
        quicksort(arr,i,right);
    }
}
int main()
{
    int n;
    cin>>n;
    int arr[n];
    for(int i=0; i<n; i++)
    {
        cin>>arr[i];
    }

    quicksort(arr,0,n-1);

    for(int i=0; i< n; i++)
    {
        cout<< arr[i]<<" ";
    }

}

asked 02 Feb '16, 15:02

Abid%20Al%20-%20Amin's gravatar image

Abid Al - Amin
7710

edited 02 Feb '16, 15:27


pivot এর মান কিন্তু এরে এর সবার শেষ এলিমেন্ট এর মান হতে হবে। কিন্তু আপনি এখানে মাঝের একটির মান নিয়েছেন ।

//pivot = arr[left+right/2]; //এটি হবে না । 
pivot = arr[right]; // এটি হবে

আর একটি কথা int arr[n]; এখানে n এর জায়গায় কন্সটেন্ট ব্যাবহার করা উচিত । যেমন int arr[100];

permanent link

answered 03 Feb '16, 01:51

Sharif%20Chowdhury's gravatar image

Sharif Chowdhury
3.5k111

ধন্যবাদ ভাইয়া। pivot = arr[(left + right)/2] দিলে কোন প্রবলেম হচ্ছেনা। এক্ষেত্রে সবসময় pivot right ধরতে হবে এমন কি কোন বাধ্যবাধকতা আছে?

(03 Feb '16, 12:19) Abid Al - Amin

যে কোনো একটি হলেই হবে ।

(03 Feb '16, 14:10) Sharif Chowdhury

যেহেতু ভাগের কাজ যোগের আগে হয়, তাই ৬ নম্বর লাইনে আপনার ভাগ টা হচ্ছে শুধু রাইটের উপর, তারপর যোগ হচ্ছে লেফটের সাত্থে। এটা ঠিক করার জন্য এই লাইনটি

    pivot = arr[left+right/2];

পরিবর্তন করে

    pivot = arr[(left+right)/2];

ধরণের কিছু একটা করুন, যা আপনি আসলে করতে চেয়েছিলেন।

অনলাইন কম্পাইলারে আমার দেখা মতে এটা ঠিক মত কাজ করে। আরো ভুল থাকতে পারে, তবে আমি যতগুলো ইনপুট দিয়েছি, কাজ করেছে। প্রোগ্রামটি এখানে দেখতে পারেন।

ধন্যবাদ।

permanent link

answered 03 Feb '16, 01:52

manetsus's gravatar image

manetsus
2.2k211

edited 03 Feb '16, 01:54

1

ধন্যবাদ ভাইয়া

(03 Feb '16, 12:20) Abid Al - Amin

@abid-al-amin আপনাকেও অসংখ্য ধন্যবাদ :)

(03 Feb '16, 17:48) manetsus
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×131
×2

question asked: 02 Feb '16, 15:02

question was seen: 710 times

last updated: 03 Feb '16, 17:48