PDA

View Full Version : مرتب سازی یک آرایه دو بعدی با الگوریتم quick sort ?



vb8334
یک شنبه 01 دی 1392, 23:54 عصر
سلام دوستان

من می خوام یه برنامه ای بنویسم که یه آرایه ی دو بعدی که 100 تا عدد نا مرتب داره رو مرتب کنه.

که ساختارش به این صورت هستش:عکس گذاشتم

من الگوریتم quick sort رو مطالعه کردم بیشتر مثال ها برای آرایه یک بعدی هستش و مشکل من
اینجاست چطوری میتونم برای آرایه دو بعدی استفاده کنم

به دلیل اینکه ساختار فایل من به صورتی هست که x, y به هم دیگر وابسته هستند

یعنی همونطور که تو عکس می بینید مثلآ :عدد 10,8 با 1,4 مقایسه میشه زمانی که 1 از 10 کوچکتر هست
باهم جا به جا میشن حالا باید 8 , 5 هم جا به جا بشن یعنی منظروم اینکه وقتی 1 با 10 داره جا به جا میشه
خود 1 یه y هم داره که عدد 4 هست اونم باید باهاش بیاد.

ما تو quick sort یه محور میگریم اما اینجا آریه دو بعدی هستش چطوری میتونم محور بگیرم براش.

کلآ میخوام بدونم برای مرتب سازی آرایه ای دو بعدی به این شکلی که گفتم با quick sort چطوری میتونم
پیاده سازیش کنم.

مرسی

Moseyza
دوشنبه 02 دی 1392, 00:20 صبح
سلام
اینطور که من فهمیدم میخوای یک بار بر مبنای اولین عنصر از زوجت مرتب کنی و بعد همون عناصر مرتب شده رو دوباره بر منبای عنصر دوم. درسته؟
اگه درست فهمیده باشم و اینطور باشه که گفتم در واقع شما هر بار داری یک آرایه یک بعدی رو مرتب میکنی. در صورتی عنصر اول همه زوجها متمایز باشه مرتب سازی با حالت معمولی هیچ تفاوتی نداره اگه مثلا سه مورد 4,1 و 4,2 و 4,3 رو داشتیم که همگی عنصر اولشون یکسانه در مورد این زیرآرایه عنصر دوم رو مبنا میگیریم و مرتب میکنیم.

vb8334
دوشنبه 02 دی 1392, 00:52 صبح
خیلی راحت اگر در یک بعدی 2 اشاره گر داری که از سمت چپ و راست با هم مقایسه می شن اینجا باید 4 تا اشاره گر داشته باشی 2 تا برای ایکس ها و 2 تا برای وای ها .در کل هر چی داری باید 2 تای دیگه بهشون اضافه کنی یعنی 4 تا تابع بازگشتی می خوات . همه چی باید دوبل بشه .
در کل این میشه بگی یک تقارنه .:متعجب:

اگه درست متوجه شده باشم فکر کنم منظورتون این بود که ابتدا باید ستون x رو مرتب کرد بدش باید ستون y رو که اگه اینطوری باشه مرتب سازی اشتباه در میاد.

1,1,10,14,723,723 x

2,4,5,8,50,80 y


که اگه دقت کنید عدد 1 y ش میشه 2 که درست نیست باید بشه 4 و........

مرسی

vb8334
دوشنبه 02 دی 1392, 00:57 صبح
سلام
اینطور که من فهمیدم میخوای یک بار بر مبنای اولین عنصر از زوجت مرتب کنی و بعد همون عناصر مرتب شده رو دوباره بر منبای عنصر دوم. درسته؟
اگه درست فهمیده باشم و اینطور باشه که گفتم در واقع شما هر بار داری یک آرایه یک بعدی رو مرتب میکنی. در صورتی عنصر اول همه زوجها متمایز باشه مرتب سازی با حالت معمولی هیچ تفاوتی نداره اگه مثلا سه مورد 4,1 و 4,2 و 4,3 رو داشتیم که همگی عنصر اولشون یکسانه در مورد این زیرآرایه عنصر دوم رو مبنا میگیریم و مرتب میکنیم.

چیزی که میگید درسته اما در صورتی که عنصر اول باهم متفاوت باشند باید فقط عنصر اول باهم مقایسه بشن و این نیاز هستش که y عنصر اول هم باهاشون بیاد.
اما نگفتید چجوری در آرایه دو بعدی براش محور بگیرم چون تو آرایه یک بعدی این کار رو میکردیم.

مرسی

habibb
دوشنبه 02 دی 1392, 02:06 صبح
دو بعدی کار نکنید بلکه بیاین و دو بعدتون رو به صورت عدد اعشاری در نظر بگیرید یعنی 1و4 بشه عدد اعشاری 1.4 بعد اعشار ها رو با Quick Sort یک بعدی مرتب کنید بعد اگر خواستید مجددا اعشارها رو برگردونید و آرایه یک بعدی تون رو دو بعدی کنید .
قسمت صحیح در بعد اول و قسمت اعشاری هم بره در بعد دوم .