PDA

View Full Version : سوال: کد جستجو ی سریع



hosein_2548
چهارشنبه 08 آذر 1391, 18:34 عصر
سلام دوستان
من میخوام داخل یه "لیست باکس " جستجو کنم اما نمیخوام جستوجوی معمولی باشه
تعداد داده ها حدود پنج هزار تاس و من میخوام از جستجویی استفاده کنم که :
ابتدا وسط این داده هارو پیدا کنه و ببینه عدد مورد نظر کوچکتره یا بزرگتره از نصف داده ها (اطلاعات به ترتیب صعودی هستند) ، بعد دوباره از اون نصفه داده ها نصف آنهارا انتخاب کنه و به همین ترتیب ادامه بده تا پیداش کنه!!


کسی میتونه کمکم کنه ؟
با سپاس فراوان

rahime
پنج شنبه 09 آذر 1391, 08:14 صبح
از جست و جوی باینری استفاده کن دقیقا همین کاری رو انجام میده که می خوای
یه سرچ کن الگوریتمش رو همین طور کدش رو پیدا می کنی

hosein_2548
جمعه 10 آذر 1391, 22:15 عصر
خیلی ممنونم دوست من

hosein_2548
پنج شنبه 12 بهمن 1391, 17:35 عصر
کد زیر یک ورودی دریافت میکند و نزدیک ترین عدد به آن را از لیستی که داده های در آن قرار دارند جستجو میکند . در این روش جستجو بدون خروجی نمیباشد و حتما یک عدد را برمیگرداند . کد زیر با C#‎‎ نوشته شده است .



int NewData =int.parse(txtData4Search.Text);


//************************

int MedIndex = i / 2;
int Min = 0;
int Max = i;
int MedIndex1 = MedIndex;

for (int j = 1; j <= MedIndex; j++)
{
lstData.SelectedIndex=MedIndex1;
int NewData1 =int.parse(lstData.Text);


if (Max - Min <= 2)
{
rtn = NewData1;
break;
}

if (NewData < NewData1 )
{
Max = MedIndex1;
if(Max%2==0 && Min%2!=0 || Max%2!=0 &&Min%2==0)
MedIndex1 = (Min + Max - 1) / 2;
else
MedIndex1 = (Min + Max) / 2;
}
if (NewData > NewData1)
{

Min = MedIndex1;
if (Max % 2 == 0 && Min % 2 != 0 || Max % 2 != 0 && Min % 2 == 0)
MedIndex1 = (Min + Max - 1) / 2;
else
MedIndex1 = (Min + Max) / 2;
}

rtn = NewData1;
}