البرمجة بالعراقي
Відкрити в Telegram
هاي قناة سوينها ل طلاب علوم الحاسوب حتى نتعاون بيناتنا ونتعلم كل ما يتعلق بالبرمجة وايضا كلشي من ادوات ذكاء اصطناعي و مشاريع و بوتات رابط كروب مجموعة https://t.me/learn_javaaa
Показати більше833
Підписники
Немає даних24 години
-57 днів
-1330 день
Архів дописів
مهارات التواصل مهمة بالمقابلة ،
بس صعبة بالنسبة لواحد ما يختلط ولا يعمل محادثة الا نادرا مثل انا ☠
احد اسباب فشلي بالمقابلة.
اللي حاب يجرب لينكس بالبرمجة يجرب توزيعات ريدهات لا يجرب كالي لينكس ترى هذا لا هكر ولا برمجة وهم جاهز ما تتعلم منه شي.
بعد خبرة ٣ سنوات استخدام لينكس بالبرمجة ،
جربت توزيعات ديبيان و ارتش وبعدها حولت ع توزيعات ريدهات
توزيعة فيدورا ريدهات صارلي سنتين ، توزيعة مستقرة وسريعة وهي الاشهر بالسيرفرات والشبكات واللي يدرسون هندسة شبكات يعرفونها...
public class Main{
public static void main(String args[])
{
// merge sort = recursively divide array in 2, sort, re-combine
// run-time complexity = O(n Log n)
// space complexity = O(n)
int[] array = {8, 2, 5, 3, 4, 7, 6, 1};
mergeSort(array);
for(int i = 0; i < array.length; i++){
System.out.print(array[i]+ " ");
}
}
private static void mergeSort(int[] array) {
int length = array.length;
if (length <= 1) return; //base case
int middle = length / 2;
int[] leftArray = new int[middle];
int[] rightArray = new int[length - middle];
int i = 0; //left array
int j = 0; //right array
for(; i < length; i++) {
if(i < middle) {
leftArray[i] = array[i];
}
else {
rightArray[j] = array[i];
j++;
}
}
mergeSort(leftArray);
mergeSort(rightArray);
merge(leftArray, rightArray, array);
}
private static void merge(int[] leftArray, int[] rightArray, int[] array) {
int leftSize = array.length / 2;
int rightSize = array.length - leftSize;
int i = 0, l = 0, r = 0; //indices
//check the conditions for merging
while(l < leftSize && r < rightSize) {
if(leftArray[l] < rightArray[r]) {
array[i] = leftArray[l];
i++;
l++;
}
else {
array[i] = rightArray[r];
i++;
r++;
}
}
while(l < leftSize) {
array[i] = leftArray[l];
i++;
l++;
}
while(r < rightSize) {
array[i] = rightArray[r];
i++;
r++;
}
}
}
حتى ب react تصير عندي اخطاء ما اركز وين الخطأ بس ارسله الكود يصحح الكود ويذكر مكان الخطأ
احيانا يظهرلي اني ما مستدعي المكتبة وما ادري.
في الشيفرة الخاصة بخوارزمية الفرز المدمج (Merge Sort)، عند استدعاء
mergeSort(leftArray) و mergeSort(rightArray)، لا يتم تنفيذ التكرار الذاتي (recursion) "بنفس الوقت" بالمعنى الحرفي، لأن Java (مثل معظم لغات البرمجة) تنفذ الأوامر بشكل متسلسل (سطر بعد سطر) على الخيط الرئيسي (main thread) من التطبيق. لذا، يتم تنفيذ mergeSort(leftArray) أولاً، وبعد الانتهاء منها، يتم تنفيذ mergeSort(rightArray)، وأخيرًا يتم تنفيذ merge(leftArray, rightArray, array).
### التوضيح بمثال خطوة بخطوة:
نفترض أن المصفوفة الأصلية هي
{8, 2, 5, 3, 4, 7, 6, 1}.
1. استدعاء أول: mergeSort(array)
- تقسم المصفوفة إلى نصفين:
- leftArray = {8, 2, 5, 3}
- rightArray = {4, 7, 6, 1}
- استدعاء mergeSort(leftArray).
2. استدعاء ثاني: mergeSort(leftArray)
- تقسم leftArray إلى نصفين:
- leftArray = {8, 2}
- rightArray = {5, 3}
- استدعاء mergeSort(leftArray).
3. استدعاء ثالث: mergeSort(leftArray) على {8, 2}
- تقسم leftArray إلى نصفين:
- leftArray = {8}
- rightArray = {2}
- استدعاء mergeSort(leftArray) (هذا يستدعي mergeSort على {8}).
4. استدعاء رابع: mergeSort(leftArray) على {8}
- لأن طول المصفوفة 1، تعود الدالة مباشرةً (الحالة الأساسية).
- يتم الآن استدعاء mergeSort(rightArray) على {2}.
5. استدعاء خامس: mergeSort(rightArray) على {2}
- لأن طول المصفوفة 1، تعود الدالة مباشرةً (الحالة الأساسية).
6. دمج: الآن يتم استدعاء merge({8}, {2}, {8, 2}) لتجميع المصفوفتين {8} و {2} إلى {2, 8}.
7. العودة للخلف: نعود للدالة التي كانت تعمل على {8, 2, 5, 3}:
- الآن يتم استدعاء mergeSort(rightArray) على {5, 3}.
- التقسيم يتم كما في الخطوات 3-6.
8. دمج: يتم دمج {2, 8} و {3, 5} إلى {2, 3, 5, 8}.
9. العودة للخلف: نعود للدالة التي كانت تعمل على {8, 2, 5, 3, 4, 7, 6, 1}:
- الآن يتم استدعاء mergeSort(rightArray) على {4, 7, 6, 1}.
- العملية تتكرر كما في الخطوات 2-8.
10. دمج نهائي: يتم دمج {2, 3, 5, 8} و {1, 4, 6, 7} إلى المصفوفة النهائية {1, 2, 3, 4, 5, 6, 7, 8}.
### الخلاصة:
الدالتان mergeSort(leftArray) و mergeSort(rightArray) لا تنفذان "بنفس الوقت" بالمعنى الحرفي، ولكن تنفذان بالتتابع. بعد انتهاء mergeSort(leftArray), يبدأ تنفيذ mergeSort(rightArray), وبعد انتهاء كلاهما، يتم استدعاء merge لدمج المصفوفتين الفرعيتين.خوارزمية mergeSort ولا مرة فهمت من اليوتيوب كيف ينفذ هذا السطر
mergeSort(leftArray);
mergeSort(rightArray);
merge(leftArray, rightArray, array);
