logo

برنامج C للبحث عن عنصر في صفيف

في هذا المقال سنتحدث عن برنامج C للبحث عن عنصر في المصفوفة مع طرقه وأمثلته المختلفة.

ما هي المصفوفة؟

أ بنية البيانات يسمى مجموعة مصفوفة يحمل سلسلة ذات طول ثابت من العناصر المتطابقة. يتم استخدامه بشكل متكرر لتخزين مجموعات البيانات ومعالجتها لأن الفهرسة تتيح الوصول الفعال.

شيء فرز سريع

على سبيل المثال: intnumbers[] = {10, 20, 30, 40, 50};

البحث عن عنصر في مصفوفة

العملية النموذجية في برمجة الكمبيوتر هي البحث عن عنصر معين في المصفوفة. قد يتم تحسين كفاءة التعليمات البرمجية الخاصة بك بشكل كبير باستخدام خوارزميات البحث الفعالة سواء كنت تبحث عن وجود قيمة معينة لتحديد موقع فهرس عنصر ما، أو التحقق من وجود عنصر ما. ستتم مناقشة الطرق العديدة للبحث عن العناصر في المصفوفة باستخدام لغة البرمجة C في هذه المقالة.

هناك طريقتان أساسيتان للبحث عن عنصر في مصفوفة:

1. البحث الخطي

تسمى استراتيجية البحث المباشرة المستخدمة لتحديد موقع عنصر معين في مصفوفة أو قائمة البحث الخطي ، ويشار إليه أحيانًا باسم بحث متسلسل . إنه يعمل عن طريق مقارنة كل عضو في المصفوفة بالقيمة المستهدفة للعثور على مباراة أو اجتياز المصفوفة الكاملة بشكل متكرر.

معالجة الاستثناءات Java

الخطوات الأساسية في البحث الخطي هي كما يلي:

    يبدأ مع العناصر العليا للمصفوفة
  1. يجب مقارنة القيمة المستهدفة بالعنصر الحالي.
  2. يكون البحث ناجحًا إذا كان العنصر الحالي يطابق القيمة المطلوبة، ومن ثم يمكن للخوارزمية إرجاع فهرس العنصر أو أي مخرجات أخرى مرغوبة.
  3. انتقل إلى العنصر التالي في المصفوفة إذا كان العنصر الحالي لا يتطابق مع القيمة المطلوبة.
  4. حتى يتم إجراء تطابق أو الوصول إلى نهاية المصفوفة، كرر الخطوات من 2 إلى 4.

برنامج:

 #include int linearSearch(int arr[], int n, int target) { for (int i = 0; i<n; i++) { if (arr[i]="=" target) return i; the index target is found } -1; -1 not int main() arr[]="{5," 2, 8, 12, 3}; n="sizeof(arr)" sizeof(arr[0]); calculate number of elements in array result="linearSearch(arr," n, target); (result="=" -1) printf('element found
'); else at %d
', result); 0; < pre> <p> <strong>Output:</strong> </p> <pre> An element found at index 2 </pre> <h3>2. Binary Search</h3> <p>The <strong> <em>binary search</em> </strong> technique is utilized to quickly locate a specific element in a sorted <strong> <em>array</em> </strong> or <strong> <em>list</em> </strong> . It uses a <strong> <em>divide-and-conquer</em> </strong> <strong> <em>strategy</em> </strong> , periodically cutting the search area in half until the target element is located or found to be absent.</p> <p>This is how binary search functions:</p> <ol class="points"> <li>Have a sorted array or list as a base.</li> <li>Establish two pointers, <strong> <em>left</em> </strong> and <strong> <em>right</em> </strong> , with their initial values pointing to the array&apos;s first and end members.</li> <li>Use <strong> <em>(left + right) / 2</em> </strong> to get the index of the center element.</li> <li>Compare the target value to the middle element. <ol class="pointsa"> <li>The search is successful if they are equal, and then the program can return the <strong> <em>index</em> </strong> or any other required result.</li> <li>The right pointer should be moved to the element preceding the <strong> <em>middle element</em> </strong> if the middle element is greater than the target value.</li> <li>Move the <strong> <em>left pointer</em> </strong> to the element following the <strong> <em>middle element</em> </strong> if the middle element&apos;s value is less than the target value.</li> </ol></li> <li>Steps <strong> <em>3</em> </strong> and <strong> <em>4</em> </strong> should be repeated until the target element is located or the left pointer exceeds the right pointer.</li> <li>The desired element is not in the array if it cannot be located.</li> </ol> <p> <strong>Program:</strong> </p> <pre> #include int binarySearch(int arr[], int left, int right, int target) { while (left <= right) { int mid="left" + (right-left) 2; if (arr[mid]="=" target) return mid; the index target is found } < left="mid" 1; else right="mid-1;" -1; -1 not main() arr[]="{2," 5, 8, 12, 20, 23, 28}; n="sizeof(arr)" sizeof(arr[0]); calculate number of elements in array result="binarySearch(arr," 0, - 1, target); (result="=" -1) printf('element found
'); at %d
', result); 0; pre> <p> <strong>Output:</strong> </p> <pre> An element found at index 4 </pre> <hr></=></pre></n;>

2. البحث الثنائي

ال بحث ثنائي يتم استخدام هذه التقنية لتحديد موقع عنصر معين بسرعة في عملية فرز مجموعة مصفوفة أو قائمة . يستخدم أ فرق تسد إستراتيجية , قطع منطقة البحث بشكل دوري إلى النصف حتى يتم تحديد موقع العنصر المستهدف أو العثور على غيابه.

هذه هي الطريقة التي يعمل بها البحث الثنائي:

  1. احصل على مصفوفة أو قائمة مرتبة كقاعدة.
  2. وضع مؤشرين، غادر و يمين ، حيث تشير قيمها الأولية إلى الأعضاء الأول والأخير للمصفوفة.
  3. يستخدم (يسار + يمين) / 2 للحصول على فهرس العنصر المركزي.
  4. قارن القيمة المستهدفة بالعنصر الأوسط.
    1. يكون البحث ناجحًا إذا كانا متساويين، ومن ثم يمكن للبرنامج إرجاع الملف فِهرِس أو أي نتيجة أخرى مطلوبة.
    2. يجب نقل المؤشر الأيمن إلى العنصر الذي يسبق العنصر العنصر الأوسط إذا كان العنصر الأوسط أكبر من القيمة المستهدفة.
    3. حرك ال المؤشر الأيسر إلى العنصر الذي يلي العنصر الأوسط إذا كانت قيمة العنصر الأوسط أقل من القيمة المستهدفة.
  5. خطوات 3 و 4 يجب أن يتكرر حتى يتم تحديد موقع العنصر المستهدف أو أن يتجاوز المؤشر الأيسر المؤشر الأيمن.
  6. العنصر المطلوب غير موجود في المصفوفة إذا تعذر تحديد موقعه.

برنامج:

 #include int binarySearch(int arr[], int left, int right, int target) { while (left <= right) { int mid="left" + (right-left) 2; if (arr[mid]="=" target) return mid; the index target is found } < left="mid" 1; else right="mid-1;" -1; -1 not main() arr[]="{2," 5, 8, 12, 20, 23, 28}; n="sizeof(arr)" sizeof(arr[0]); calculate number of elements in array result="binarySearch(arr," 0, - 1, target); (result="=" -1) printf(\'element found
\'); at %d
\', result); 0; pre> <p> <strong>Output:</strong> </p> <pre> An element found at index 4 </pre> <hr></=>