عضو شوید



:: فراموشی رمز عبور؟

عضویت سریع

نام کاربری :
رمز عبور :
موبایل :
ایمیل :
نام اصلی :
تاریخ : دوشنبه 19 خرداد 1393
بازدید : 778
نویسنده : هادی مومنی

برنامه: پیدا کردن یک عدد در آرایه به روش دودویی یا Binary Search  

الگوریتم:

ابتدا آرایه ی ورودی را توسط یکی از روش های مرتب سازی (به عنوان مثال مرتب سازی حبابی یا Buble Sort)  که قبلا نوشته ایم ،مرتب کرده سپس با دستورات زید به جست و جو می پردازیم

 

int binary_search(int arr[],int arrsize,int obj)
{
     int first = 0;
     int last = arrsize;
     int middle = (first + last) / 2;

      while(last >= first)
      {
             if(arr[middle] == obj)
             {
                               return middle;
             }
              else if(arr[middle] > obj)
                     {
                            last = middle-1;
                            middle = (first + last) / 2;
                       }else
                              {
                                       first = middle+1;
                                       middle = (first + last) / 2;
                               }
           }
return -1;
}

ورودی ها عبارتند از: 

1 - یک آرایه (مرتب شده به صورت صعودی). (اگر آرایه نزولی مرتب شده باید جای ">"  ,  "<" را عوض کنیم)

2 - اندازه ی آرایه

3 - و عددی که باید دنباله آن بگردیم.

 

که در صورت پیدا کردن عدد در آرایه عنصر، اندیس آن و در غیر اینصورت عدد منفی یک ( 1- ) را بر می گرداند.

 

* نکات مربوط به کد سی شارپ و جاوااسکریپت

تکست باکس اول  آرایه ی ورودی را با این فرمت که پس از هر عدد یک " , " باشد(بدون هیچ فاصله ای) را گرفته و در تکست باکس دوم عددی را که باید به دنبال آن بگریم  از ورودی می گیریم.

 برنامه ی جست و جوی دودویی به زبان ++C
 //Writed By barnamenevisi-ccj.mihanblog.com

#include
#include

#define size 10
//--------------------------Buble Sort-------------------------------
void bubleSort(int num[],int numSize)
{
   int temp=0;
   for(int i=numSize;i>0;i--)
   {
           for(int j=0;j<i;j++)
                 if(num[j] > num[j+1])
                 {
                            temp = num[j];
                            num[j] = num[j+1];
                            num[j+1] = temp;
                  }
   }

}
//-----------------------Binary Search-------------------------------------
int binary_search(int arr[],int arrsize,int obj)

{
   int first = 0;
   int last = arrsize;
   int middle = (first + last) / 2;

   while(last >= first)
   {
           if(arr[middle] == obj)
           {
                     return middle;
            }
            else if(arr[middle] > obj)
                   {
                           last = middle-1;
                           middle = (first + last) / 2;
                   }else
                          {
                                first = middle+1;
                                middle = (first + last) / 2;
                           }
   }
return -1;
}
//--------------------------Main ------------------------------------
main()
{

   int test[size]={10,19,12,18,15,17,11,14,13,16};
   int searchobj=0;
   int flag;

   //sort array
   bubleSort(test,size-1);

   cout<<"Enter number to search : ";
   cin>>searchobj;

   flag = binary_search(test,size-1,searchobj);

   if(flag != -1)
                    cout<<"\nfind item in element "<<flag+1<<" .";
   else         cout<<"\nnot found.";

getch();
return 0;
}

 

   برنامه ی جست و جوی دودویی به زبان #C 
 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//-----------------------Binary Search-------------------------------------
int binary_search(int[] arr, int arrsize, int obj)

{
   int first = 0;
   int last = arrsize;
   int middle = (first + last) / 2;

   while(last >= first)
   {
            if(arr[middle] == obj)
            {
                     return middle;
             }
            else if(arr[middle] > obj)
                   { 
                             last = middle-1;
                             middle = (first + last) / 2;
                   }else{
                                 first = middle+1;
                                 middle = (first + last) / 2;
                            }
    }
return -1;
}
//.............................Buble Sort........................................
int[] bubleSort(string test)
{
   int i = 0;
   int test2size = 0;

   for (i = 0; i < txt1.TextLength; i++)
         if (test[i] == ',')
               test2size++;

    int[] test2 = new int[test2size];
   test2size = 0;

    for (i = 0; i < txt1.TextLength; i++)
   {

        if (test[i] != ',')
                 test2[test2size] = test2[test2size] * 10 + Int32.Parse(test[i].ToString());
        else test2size++;

   }
   //sorting by buble sort algorithm
   int temp = 0;
   for (i = test2size - 1; i > 0; i--)
   {
             for (int j = 0; j < i; j++)
                      if (test2[j] > test2[j + 1])
                      {
                                 temp = test2[j];
                                 test2[j] = test2[j + 1];
                                 test2[j + 1] = temp;
                       }
   }

return test2;

}
private void button1_Click(object sender, EventArgs e)
{
   int flag;
   int[] test = bubleSort(txt1.Text);

   flag = binary_search(test, test.Length, Int32.Parse(txt2.Text));
   if (flag != -1)
   {
                 MessageBox.Show("Find item on element " + (flag + 1) + " .");
   }
   else MessageBox.Show("Not Found.");

}
}
}


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


من هادی مومنی دانشجوی کارشناسی نرم افزار کامپیوتر و به زبان برنامه نویسی و طراحی صفحات وب تسلط دارم خوشحال میشم کمکتون کنم لطفا نظراتتون در مورد بهتر شدن این وبلاگ بگید.

RSS

Powered By
loxblog.Com
💬 نظرات کاربران
💬ثبت نام کاربران
💬ورود کاربران