PDA

View Full Version : سوال: مرتب کردن آرایه دو بعدی



kashir
یک شنبه 07 آذر 1389, 00:09 صبح
سلام دوستان میخواستم بدونم چطور میتونم یه آرایه دو بعدی رو مرتب کنم؟؟
با مثال زیر بهتر متوجه میشین

3 --- 6 --- 4 --- 2 --- 1
21 -- 45 -- 12 -- 41 -- 37


بعد از مرتب شدن

1 --- 2 --- 3 --- 4 --- 6
37 -- 41 -- 21 -- 12 -- 45

مثلا 5 عدد آبی رو در 5 تا لیبل و 5 عدد قرمز هم در 5 لیبل نمایش داده بشه

mansourii
یک شنبه 07 آذر 1389, 09:04 صبح
سوال شما يك سوال ساختمان دادست (از نوع Static)
براي مرتب سازي اول بايد جستجو كنيم. جتسجو هم چند نوعه كه كاربردي ترينش ( خطي - دودويي - حبابي - درجي - سريع - ادغام و هرمي)
راحترين راه الگوريتم پياده سازي بنظرم :
(( باينري سرچ )))
log(n^2) = 2*logn پس فرقی نداره Binary Search توی آرایه ی n^2 باشه یا توی آرایه ی یک بعدی n تایی! در واقع از نظر order یکی هستند!!

پس اگه همه ی اعدادو توی یه آرایه ی یک بعدی بریزیم، مرتب کردنش می شه n^2 * log(n^2) = 2 * n ^2 *logn و جستجو کردن هم می شه log(n^2) = 2 * logn

حالا فقط ميمونه پياده سازي
(برنامه رو با توضيحات مينويسم ولي قبلش خودت يه تلاش بكن ببين ميتوني با اين توصيفاتي كه من كردم پياده سازي كني؟)


' declare and initialize a jagged array
Dim a1() As Integer = {33, 12}
Dim a2() As Integer = {12, 10}
Dim a3() As Integer = {13, 5}
Dim a4() As Integer = {27, 19}
Dim a()() As Integer = {a1, a2, a3, a4}

' get the 2nd item in the 3rd row
Console.WriteLine(a(2)(1))


Class JaggedComparer
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
' x and y are arrays of integers
' sort on the 2nd item in each array
Dim a1() As Integer = DirectCast(x, Integer())
Dim a2() As Integer = DirectCast(y, Integer())
Return a1(1).CompareTo(a2(1))
End Function
End Class


' create the comparer and sort the array
Dim myComparer As New JaggedComparer
Array.Sort(a, myComparer)


Dim a(,) As Integer = {{33, 12}, {12, 10}, {13, 5}, {27, 19}}
Dim tagArray() As Integer = {0, 1, 2, 3}


Class RectangularComparer
Implements IComparer
' maintain a reference to the 2-dimensional array being sorted

Private sortArray(,) As Integer

' constructor initializes the sortArray reference
Public Sub New(ByVal theArray(,) As Integer)
sortArray = theArray
End Sub

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
' x and y are integer row numbers into the sortArray
Dim i1 As Integer = DirectCast(x, Integer)
Dim i2 As Integer = DirectCast(y, Integer)

' compare the items in the sortArray
Return sortArray(i1, 1).CompareTo(sortArray(i2, 1))
End Function
End Class


Dim a(,) As Integer = {{33, 12}, {12, 10}, {13, 5}, {27, 19}}
Dim tagArray() As Integer = {0, 1, 2, 3}
' Initialize the comparer and sort
Dim myComparer As New RectangularComparer(a)
Array.Sort(tagArray, myComparer)

Dim i As Integer
For i = 0 To tagArray.Length - 1
Console.WriteLine(a(tagArray(i), 1))
Next

گرافيكي كردن برنامه هم كه ديگه كاري نداره فقط كافيه اسم آرايه رو به ليبلت متصل كني.