اذهب إلى المحتوى
  • 0

دوال جاهزة لإجراء عمليات الترتيب والبحث على المصفوفات في ++C

أدم محمد2

السؤال

Recommended Posts

  • 1

إن كنت تستخدم المصفوفات الساكنة ذات الطول الثابت، او غيرها يمكن استعمال تابع الترتيب ()std::sort

كيف يعمل:

int n = 10;  // حجم المصفوفة

int a =  {1,2,3,7,8,4,5,6,0} // تهيئة 

// int a[n];   قم بالتعريف بهذه الطريقة إن أردن إدخال قيم من حلقة لاحقا

sort ( a , a + n)
  • أول وسيط هو مؤشر بدياية المصفوفة
  • ثاني وسيط يمثل مؤشر نهابة المجال الذينريد ترتريبه

في المصفوفة اسمها هو نفسه مؤشر على بدايتها، وعملية الجمع تمثل عملية إزاحة للمؤشر الآخر، هذين المؤشرين يحددان طول المصفوفة الخاضع للترتيب

يمكن تمرير دالة مخصصة لتابع الترتيب في حال أردنا عمل ترتيب مختلف عن الافتراضي

 bool comp(int i, int j) {
        // تستقبل الدالة الوسيطين الحاليين الذين بينهما علاقة ترتيب
    }

sort(a , a + n, comp);

يمكن استعمال الدالة sort مع vector بتمرير المؤشرات حسب دوال vector:

vector <int > v(n);
  
sort(v.begin(), v.end(), comp);

وبالنسبة لعملية البحث عن عنصر في مصفوفة في ++C يمكن استخدام الدالة find والتي تعيد مؤشر على آخر عنصر مرت عليه في المصفوفة، إما يكون العمنصر المطلوب أو مؤشر على نهاية المصفوفة

#include <iostream>     // std::cout
#include <algorithm>    // std::find
#include <vector>       // std::vector

int main () {
  // بحث في مصفوفة عادية
  int ints[] = { 1, 2, 3, 4 };
  int * p;

  p = std::find (ints, ints+4, 30);
  
  if (p != myints+4)
    std::cout << "موجود: " << *p << '\n';
  else
    std::cout << "غير موجود\n";

  // بحث في vector and iterator:
  std::vector<int> vec (ints,ints+4);
  std::vector<int>::iterator it;

  it = find (vec.begin(), vec.end(), 30);
  if (it != myvector.end())
    std::cout << "موجود: " << *it << '\n';
  else
    std::cout << "غير موجود\n";

  return 0;
}

الشكل العام لتابع البحث:

if(	std::find(vector.begin(), vector.end(), item)!=vector.end()	){
      // العنصر موجود
}

يوجد أيضا تابع البحث الثانئي binary search وهذا يشترط ترتيب المصفوفة:

if(binary_search(vector.begin(), vector.end(), item)){
     // موجود
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يوجد بالفعل في c++ مكتبة STL  والتي ترمز ل (Standard Template Library) والتي تتكون من أربع مكونات

  1. الحاويات: وتعبر عن هياكل البيانات المختلفة مثل vector, set, list, graph, tree
  2. المكررات(iterators) :يُستخدمو بالتوازي مع الحاويات من أجل إجراء عمليات على عناصر الحاويات
  3. الخوارزميات: هنا يوجد خوارزميات مختلفة لمهام مختلفة , وهنا تجد ما تريده , حيث تجد هنا خوارزميات للبحث والترتيب
    int x=1, y=0;                             
    std::swap(x,y);

    هذا مثلاً كود من المكتبة من أجل عملية الswapping

    int *result =std::find(arr.begin(), arr.end(), item)
    cout<<result-arr.begin()

    هذا كود من أجل البحث عن عنصر معين في المصفوفة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...