تبلیغات
آموزش برنامه نویسی سی ++،سی شارپ،جاوا اسکریپت - مرتب کردن لایه ای shell
آموزش برنامه نویسی سی ++،سی شارپ،جاوا اسکریپت

مرتبه
تاریخ : جمعه 29 خرداد 1394
برنامه:آرایه ای به طول size را به روش لایه ای یا Shell Sort به طور صعودی مرتب می کند

روش کار: 
این روش مرتب سازی نسخه ی بهینه شده ای است برای مرتب سازی درجی، در مرتب سازی درجی به هر عنصر که می رسیدیم آن را با عناصر قبلی مقایسه می کردیم و مکان مناسب آن را در بین عناصر قبلی یافته و در آن مکان قرار می دادیم. روال کار هم به این صورت بود که آن را به ترتیب با خانه ی قبلی (1 خانه اختلاف) و سپس با خانه ی قبل تر و ... مقایسه می کردیم

تصویری از تفاوت مرتب سازی درجی و لایه ای

اما اگر ما بجای آنکه یک خانه یک خانه مقایسه انجام دهیم بیایم و گام آن را افزایش دهیم مثلا با 2 یا 3 خانه ی قبلی مقایسه بکنیم نتیجه ی بهتری می گیریم

مراحل کار به این شکل هست
1 - تابع مرتب سازی درجی به صورت مقابل هست، همانطور که میبینید تعداد گام ها یک می باشد

void insertionSort(int[] a,long int size)
{
int i,j;
int temp;
for(i=0;i<size;i++)
{
temp=a[i];
for(j=i;j>0 && a[j-1]>temp;j--)
{
a[j]=a[j-1];
}
a[j]=temp;
}
}

2 - تعداد گام ها را افزایش می دهیم

void insertionSort(int[] a,long int size)
{
int i,j;
int temp;
int increment=3;
for(i=0;i<size;i++)
{
temp=a[i];
for(j=i;  j>=increment && *a[j-increment]>temp; j -= increment)
{
a[j]=a[j-increment];
}
a[j]=temp;
}
}

3 - حلقه ی مربوط به کاهش گام ها را اضافه می کنیم

void ShellSort(int[] a,long int size)
{
int i,j;
int temp;
int increment=3;
while(increment > 0)
{
for(i=0;i<size;i++)
{
temp=a[i];
for(j=i;  j>=increment && *a[j-increment]>temp; j -= increment)
{
a[j]=a[j-increment];
}
a[j]=temp;
}
increment= increment -2;
}
}

و تمام...

دقت داشته باشید بسته به مقدار اولیه ای که به increment می دهیم و تعداد گام هایی که از آن کم می کنیم ، سرعت و کارایی برنامه تغییر خواهد کرد.


موفق باشید



طبقه بندی: مرتب سازی، 
می تونید با ارسال شارژ از من حمایت کنید 09392888216
برچسب ها: سورس کد مرتب سازی لایه ای، سورس کد مرتب سازی shell، مرتب سازی لایه ای به زبان سی، مرتب سازی shell به زبان سی، Shell Sort، Shell Sort Code،
آرشیو مطالب
صفحات جانبی
پیوند های روزانه
امکانات جانبی
blogskin

قالب وبلاگ