وبلاگ شخصی فرشاد دهقانی

نسخه ای از همه ی کارها و فعالیت هایی که انجام میدم رو این جا میذارم

نسخه ای از همه ی کارها و فعالیت هایی که انجام میدم رو این جا میذارم

چیزای مختلفی مثل مقالات، بخش های مورد علاقه کتاب ها، سایت های مفید، آموزش، ترجمه هایی که انجام دادم، کد های برنامه نویسی، راه حل های مسائل برنامه نویسی و ایده هامو اینجا میذارم. لطفاً نظرات خوددتون رو زیر هر پست برام بنویسید

Merge Sort

چهارشنبه, ۲۶ فروردين ۱۳۹۴، ۰۸:۱۷ ق.ظ

سلام. این بار با یک الگوریتم بسیار موثر مرتب سازی به نام Merge Sort آشنا می شیم. پیچیدگی زمانی این الگوریتم (O(nlogn هست. ایده های اولیه تشکیل دهنده این الگوریتم:

۱- Recursive behaviour

۲- ترکیب لیست های مرتب شده

 


def merge (a, b):
    ca = len(a)
    cb = len(b)
    lst = []
    while len(lst) < len(a) + len(b):
        if ca != 0 and cb != 0:
            if a[-ca] >= b[-cb]:
                        lst.append(b[-cb])
                        cb -= 1
            else:
                        lst.append(a[-ca])
                        ca -= 1
        else:
            if ca == 0:
                        lst.append(b[-cb])
                        cb -= 1
            else:
                        lst.append(a[-ca])
                        ca -= 1
    return lst

def MergeSort(ar, n):
    pivot = n/2
    if n <= 1:
        return ar
    else:
        return merge(MergeSort(ar[:pivot], pivot), MergeSort(ar[pivot:], n-pivot))

n = input("size of array: ")
ar = [int(x) for x in raw_input("enter array: ").split()]

print " ".join(str(x) for x in MergeSort(ar, n))

 

موافقین ۰ مخالفین ۰ ۹۴/۰۱/۲۶
fdehqani

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی