برنامه نویسی

درک مرتب‌سازی حبابی: روش مرتب‌سازی ساده

مرتب سازی حبابی مرتب سازی را با مقایسه و مبادله مداوم عناصر مجاور انجام می دهد. این فرآیند شبیه حباب هایی است که از پایین به بالا بالا می روند، از این رو به آن مرتب سازی حبابی می گویند.

همانطور که در شکل زیر نشان داده شده است، فرآیند حباب را می توان با استفاده از عملیات تعویض عنصر شبیه سازی کرد: با شروع از سمت چپ ترین انتهای آرایه و حرکت به سمت راست، اندازه عناصر مجاور را به ترتیب مقایسه کنید. اگر “عنصر چپ > عنصر سمت راست”، آنها را عوض کنید. پس از پیمایش، بزرگترین عنصر به انتهای سمت راست آرایه منتقل می شود.

=== “”
شبیه سازی فرآیند حباب با استفاده از تعویض المان

=== “”
حباب_عملیات_step2

=== “”
bubble_operation_step3

=== “”
حباب_عملیات_step4

=== “”
bubble_operation_step5

=== “”
حباب_عملیات_step6

=== “”
bubble_operation_step7

فرآیند الگوریتم

با فرض اینکه طول آرایه $n$ باشد، مراحل مرتب سازی حبابی در شکل زیر نشان داده شده است.

  1. ابتدا یک “حباب” روی عناصر $n$ انجام دهید، جابجایی بزرگترین عنصر در موقعیت صحیح خود.
  2. سپس، یک “حباب” را روی عناصر باقیمانده $n – 1$ انجام دهید. تعویض دومین عنصر بزرگ در موقعیت صحیح خود.
  3. به طور مشابه، پس از $n – 1$ دور “حباب”، بزرگترین عناصر بالای $n – 1$ به موقعیت های صحیح خود مبادله می شوند.
  4. تنها عنصر باقی مانده لزوما کوچکترین است و نیازی به مرتب سازی ندارد، بنابراین مرتب سازی آرایه کامل است.

فرآیند مرتب سازی حباب

بهینه سازی کارایی

متوجه می‌شویم که اگر هیچ تعویضی در یک دور «حباب‌سازی» انجام نشود، آرایه از قبل مرتب شده است و می‌توانیم بلافاصله نتیجه را برگردانیم. بنابراین، ما می توانیم یک پرچم اضافه کنیم flag برای نظارت بر این وضعیت و بلافاصله پس از وقوع آن بازگشت.

حتی پس از بهینه‌سازی، پیچیدگی زمانی در بدترین حالت و میانگین پیچیدگی زمانی مرتب‌سازی حبابی در $O(n^2)$ باقی می‌ماند. با این حال، زمانی که آرایه ورودی به طور کامل مرتب شود، می تواند به بهترین پیچیدگی زمانی $O(n)$ دست یابد.

کد جاوا –

public class BubbleSort {

    public int[] sortArray(int[] nums) {
        for (int i = nums.length - 1; i > 0; i--) {
            boolean flag = false;
            for (int j = 0; j  i; j++) {
                if (nums[j] > nums[j + 1]) {
                    int tmp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = tmp;
                    flag = true;
                }
            }
            if (!flag) {
                break;
            }
        }
        return nums;
    }
}


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد پایتون –


def bubbleSort(nums):
    for i in range(len(nums)-1,0,-1):
        flag=False;
        for j in range(i):
            if nums[j]>nums[j+1]:
                nums[j],nums[j+1]=nums[j+1],nums[j];
                flag=True;

        if not flag:
            break;
    return nums;


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ویژگی های الگوریتم

  • پیچیدگی زمانی $O(n^2)$، مرتب‌سازی تطبیقی: طول آرایه پیموده شده در هر دور “حباب” به ترتیب از $n – 1$، $n – 2$، $\dots$، $2$، $1$ کاهش می‌یابد که در مجموع $(n – 1) n / 2 است. $. با معرفی flag بهینه سازی، بهترین پیچیدگی زمانی می تواند به $O(n)$ برسد.
  • پیچیدگی فضایی $O(1)$، مرتب‌سازی در محل: فقط مقدار ثابتی از فضای اضافی توسط نشانگرهای $i$ و $j$ استفاده می شود.
  • مرتب سازی پایدار: به عنوان عناصر مساوی در طول “حباب” مبادله نمی شود.

مرجع :-

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا