מימוש מיון מיזוג (MERGE SORT) ע"י חלוקה ל3

machinehead

New member
מימוש מיון מיזוג (MERGE SORT) ע"י חלוקה ל3

שלום, אני צריך לממש קטע קוד במיון מיזוג ע"י חלוקת המערך ל 3 במקום ל2, לקחתי קטע קוד מוכן והתחלתי לשנות אותו את החלק של ה MERGE SORT אני חושב שביצעתי נכון, את החלק השני, שהוא הפונקציה MERGE, נתקעתי, אנא כוונו אותי תודה מראש
#include <stdio.h> void merge(int a[], int low, int high, int mid); int mergesort(int a[], int low, int high); void main() { } int mergesort(int a[], int low, int high) { int mid1,mid2; if(low<high) { mid1=(low+high)/3; mid2(mid1+high)/3; mergesort(a,low,mid1); mergesort(a,mid1,mid2); mergesort(a,mid2,high); //mergesort(a,mid+1,high); merge(a,low,high,mid); } return(0); } void merge(int a[], int low, int high, int mid) { int i, j, k, c[50]; i=low; j=mid+1; k=low; while((i<=mid)&&(j<=high)) { if(a<a[j]) { c[k]=a; k++; i++; } else { c[k]=a[j]; k++; j++; } } while(i<=mid) { c[k]=a; k++; i++; } while(j<=high) { c[k]=a[j]; k++; j++; } for(i=low;i<k;i++) { a=c; } }
 

בינארית

New member
לא כ"כ הבנתי איפה נתקעת

קראתי את הקוד שלך, ועושה רושם שזה אמור לעבוד. אולי תבנה מיין זמני, רק לצורך בדיקה??
 

machinehead

New member
העניין כזה

בפונקצית ה MERGE, היא בנוייה עבור חלוקה ב 2, אני רוצה לחלק את המערך ל 3 (זה ביצעתי בMERGE SORT) , אבל אני רוצה שגם בפנים תהיה חלוקה ל3.
 

בינארית

New member
אם הכוונה שלך הייתה

לחלק כל פעם ל-3 עד שאתה מקבל יחידות בודדות, ואז להכניס אותם למערך ממויין, אז כל מה שלגעתי אתה צריך לעשות זה להוסיף לפונקציה MERGE שלך מערך temp בגודל זמני, בהתאם לנתונים שידועים לך, וכל פעם להשוות בין 2. כלומר, סכ"ה לעשות פעמיים את הפונקציה merge פכם אחת על שליש ימני ושליש אמצעי, ופעם שנייה על המערך הממויין שהרגע יצרת עם השליש השמאלי. הבנתי נכון???
 

בינארית

New member
אם הכוונה שלך הייתה

לחלק כל פעם ב-3 עד שאתה מקבל יחידות בודדות, ואז להכניס אותם למערך ממויין?? אם כן כל מה שלדעתי אתה צריך לעשות זה להוסיף לפונקציה MERGE שלך מערך temp בגודל זמני, בהתאם לנתונים שידועים לך, או: לקרוא לפונקציה MERGE הנתונה פעמיים באופן הבא: בכל פעם להשוות בין 2. פעם אחת על שליש ימני ושליש אמצעי, ופעם שנייה על המערך הממויין שהרגע יצרת עם השליש השמאלי שנשאר. הבנתי אותך נכון???
 

yaeerk

New member
אין כמעט

חלק שאתה עושה נכון. אני מציע שבמקום לקחת קוד קיים תתחיל לכתוב מהתחלה.
 

machinehead

New member
תודה, אבל

המרצה ביקשה שניקח את הקטע קוד ונשנה אותו, לא לכתוב אחד מחדש
 

yaeerk

New member
נו באמת

ואם המרצה היתה מבקשת שתקפצו מהגג... ברור לחלוטין שלא הבנת את השיטה. קודם כל תברר לעצמך שאתה מבין אותה. קח באמת מערך של מספרים ותמיין אותו בעצמך. אחרי כן תוכל לכתוב את העניין מהתחלה (כולו איזה עשרים שורות קוד) תוך עשר דקות.
 
למעלה