سوال در مورد ادغام و مرتب سازی آرایه - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

سوال در مورد ادغام و مرتب سازی آرایه

0 امتیاز

سلام، کدی که گذاشتم قسمتی از یک برنامه هست که دو آرایه رو از کاربر میگیره و با هم ادغام میکنه، بعد اون رو به صورت صعودی مرتب میکنه. کد بدون اشکال کار میکنه، فقط در مورد دو قسمت از این دستور سوال داشتم که با فلش قرمز رنگ در تصویر مشخص کردم. یکی این که ++i که با فلش مشخص شده در اون کد چه نقشی داره و دوم اینکه چرا K تا Sum-1 پیش رفته. ممنون.

سوال شده مرداد 24, 1399  بوسیله ی golden.light (امتیاز 43)   6 7 10

3 پاسخ

+1 امتیاز
 
بهترین پاسخ

سلام.دوست عزیز اول خدمتتون عرض کنم که کل این کار رو با چند خط کد ساده میشه انجام داد و نیازی به پیچیده کردن کار نیست :

var z = new int[x.Length + y.Length];
x.CopyTo(z, 0);
y.CopyTo(z, x.Length);
Array.Sort(z);

x : آرایه اول

y : آرایه دوم

z : آرایه کلی(ادغام شده)

اما در مورد سوالاتون ،

i در واقع نقش شماره ایندکس آرایه کلی(ThirdArray) رو بازی میکنه.فرض کنید آرایه اول 5 عنصر و آرایه دوم 7 عنصر داره.توی for اول 5 عنصر به ThirdArray اضافه میشن.توجه داشته باشید که i بیرون حلقه اول تعریف شده تا در ادامه هم بشه ازش استفاده کرد.توی for بعدی 7 عنصر آرایه دوم اضافه میشن که طبعا باید به 5 عنصر قبلی اضافه بشن.یعنی از عنصر ششم تا دوازدهم آرایه ThirdArray.واسه همین i یه دونه یه دونه زیاد میشه تا عناصر آرایه دوم توی خونه های ششم(ایندکس 5) تا دوازدهم(ایندکس 11) بشینن.

در مورد sum-1 : این بخش کد که دو تا for تودرتو هست در واقع کار مرتب سازی رو انجام میده(روش مرتب سازی حبابی که یه الگوریتم رایج برای مرتب سازی هست).

به طور کلی ، توی این حلقه ها ، هر عنصر با عنصر بعدیش مقایسه میشه (به خط if داخل for دوم دقت کنید) و بر حسب نوع مرتب سازی(صعودی یا نزولی) در صورت نیاز(کوچکتر یا بزرگتر بودن) با هم جابجا میشن و اینکار تکرار میشه تا در نهایت آرایه به طور کامل مرتب بشه.

اگه حلقه دوم بخواد تا sum پیش بره به جایی میرسه که میخواد عنصر آخر رو با عنصر بعدیش مقایسه کنه!!!!! مثلا اگه  ThirdArray دارای 12 عنصر باشه ، میخواد عنصر دوازدهم رو با عنصر سیزدهم که اصلا وجود نداره مقایسه کنه و بالطبع خطای "ایندکس بیرون از محدوده" خواهد داد.

اگر هم هر مقداری کمتر از sum-1 بهش بدید(sum -2 یا sum -3  یا ...) باعث میشه مرتب سازی به طور کامل انجام نشه(البته بسته به مقادیر موجود در آرایه ،گاهی درست عمل خواهد کرد.اما از لحاظ الگوریتمیک ، 100% صحیح نخواهد بود)

پ.ن : اگر در if ذکر شده ، شرط  =<  رو به  <  تغییر بدید ، الگوریتم بهینه تر خواهد شد.

پاسخ داده شده مرداد 25, 1399 بوسیله ی ik (امتیاز 571)   1 2 8
انتخاب شد شهریور 4, 1399 بوسیله ی golden.light
+1 امتیاز

پاسخ از لینکدین Abazar Ghazanfari

سلام در مورد سوال اول باید بگم که چون می خواسته دو تا آرایه رو باهم ادغام کنه ابتدا آرایه اول را کپی کرده که تعداد آن با i کنترل میشده (یه حلقه که در کد بالا نیست) و بعد در ادامه آرایه دوم رو کپی کرده اگه نگاه کنید اندیس ارایه سوم همیشه i هستش در مورد دومی باید بگم که در این نوع مرتب سازی اگر شما n عدد داشته باشی با n-1 بار می توانی آنها را مرتب کنی چون آخری خودبه خود مرتب خواهد شد

پاسخ داده شده مرداد 26, 1399 بوسیله ی 7khatcode (امتیاز 228)   2 4
0 امتیاز

پاسخ از لینکدین mohammad soltani 

1st degree connection

 

تا حدی کامل نیست کد، مثلا در حلقه اول متغير i مقداردهی نشده، در حلقه دوم هم ظاهرا مرتب سازی حبابی می خواستن انجام بدن ولی خب اون هم درست انجام نشده.

پاسخ داده شده مرداد 26, 1399 بوسیله ی 7khatcode (امتیاز 228)   2 4
...