۱۴-اسفند-۱۳۸۷, ۱۹:۵۹:۲۵
۱۷-اسفند-۱۳۸۷, ۰۲:۲۵:۰۹
به کدوم زبان باید باشه؟ فقط الگوریتمشو میخوای؟
آرایه مرتب شده نزولیه؟
توضیح بیشتری بدی خیلی خوبه.
آرایه مرتب شده نزولیه؟
توضیح بیشتری بدی خیلی خوبه.
۱۹-اسفند-۱۳۸۷, ۰۲:۳۸:۳۱
برای این کار میتونی از روش جستجوی دودویی استفاده کنی.
این کار را برای یک آرایه فرضی انجام می دهیم.
اندیس اولین خانه آرایه را L و اندیس آخرین خانه را H در نظر می گیریم. (مثلاً برای زمانی که آرایه از شماره 3 شروع شده و به 8 ختم می شود که در این حالت، اولین خانه 3 و آخرین خانه 7 خواهد بود)
middle هم مقدار میانی درنظر گرفته می شود.
آرایه ای با نام A که قرار است عنصر x در آن یافت شود.
ابتدا عنصر میانی آرایه را در نظر می گیریم. اگر عنصر x با عنصر میانی برابر بود کار تمام است. اگر از عنصر میانی کوچک تر بود آنگاه متغیر H را برابر با عنصر وسط منهای یک قرار می دهیم تا عناصر قبل از عنصر میانی را بررسی کنیم و به بعد از آن کاری نداریم.
اگر x از عنصر میانی بزرگتر بود آنگاه متغیر L را برابر عنصر میانی بعلاوه یک قرار می دهیم تا عناصر بعد از عنصر میانی بررسی شوند.
به همین ترتیب هردفعه نیمی از آرایه موجود کنار می رود تا وقتی که به جواب برسیم و سپس توسط دستور return جواب را به تابع برمی گردانیم.
حالا شبه کد رو می نویسیم.
البته این کد برای جستجو در آرایه صعودی نوشته شده. برای نزولی هم شبیه همینه. فقط یخورده دستکاری نیاز داره.
این کار را برای یک آرایه فرضی انجام می دهیم.
اندیس اولین خانه آرایه را L و اندیس آخرین خانه را H در نظر می گیریم. (مثلاً برای زمانی که آرایه از شماره 3 شروع شده و به 8 ختم می شود که در این حالت، اولین خانه 3 و آخرین خانه 7 خواهد بود)
middle هم مقدار میانی درنظر گرفته می شود.
آرایه ای با نام A که قرار است عنصر x در آن یافت شود.
ابتدا عنصر میانی آرایه را در نظر می گیریم. اگر عنصر x با عنصر میانی برابر بود کار تمام است. اگر از عنصر میانی کوچک تر بود آنگاه متغیر H را برابر با عنصر وسط منهای یک قرار می دهیم تا عناصر قبل از عنصر میانی را بررسی کنیم و به بعد از آن کاری نداریم.
اگر x از عنصر میانی بزرگتر بود آنگاه متغیر L را برابر عنصر میانی بعلاوه یک قرار می دهیم تا عناصر بعد از عنصر میانی بررسی شوند.
به همین ترتیب هردفعه نیمی از آرایه موجود کنار می رود تا وقتی که به جواب برسیم و سپس توسط دستور return جواب را به تابع برمی گردانیم.
حالا شبه کد رو می نویسیم.
کد php:
{
int middle , L , H ;
L = 0 ;
H = n - 1 ;
while ( L <= H )
{
middle = ( L + H ) / 2 ;
if ( x == A[middle] )
return ( middle + 1 ) ;
if ( x > A[middle] )
L = middle + 1 ;
else
H = middle - 1 ;
}
return (0);
}
البته این کد برای جستجو در آرایه صعودی نوشته شده. برای نزولی هم شبیه همینه. فقط یخورده دستکاری نیاز داره.