Быстрая Сортировка

Быстрая Сортировка. <br/><br/>Часть 1: <br/>Sub open_file() <br/> Dim a(500) As Integer <br/> Dim b(500) As Integer <br/> Dim e(500) As Integer <br/> Dim n As Long <br/> Dim sr As Long <br/> Dim swich As Long <br/> Dim z As Integer <br/> Dim begintime As Date <br/> Dim endtime As Date <br/><br/> n = InputBox(&quot;n=&quot;) <br/> <br/> Max = 100 <br/> Min = -100 <br/> Randomize <br/> <br/> begintime = Timer <br/> <br/> swich = 0 <br/> sr = 0 <br/> minim = 1 <br/> maxim = n <br/> <br/> z = Int((maxim) * Rnd() + minim) <br/> t = a(z) <br/><br/>line1: c1 = 1 <br/> d1 = 1 <br/> i = 1 <br/><br/>Do While i &lt;= n <br/> If a(i) &lt;= t Then b(c1) = a(i): c1 = c1 + 1: sr = sr + 1 <br/> If a(i) &gt; t Then e(d1) = a(i): d1 = d1 + 1: sr = sr + 1 <br/> i = i + 1 <br/>Loop <br/><br/>m1 = c1 - 1 <br/>m2 = d1 - 1 <br/>swich = swich + m1...
18 января 2005, вторник 23:51
Alien для раздела Блоги
Быстрая Сортировка.

Часть 1:
Sub open_file()
Dim a(500) As Integer
Dim b(500) As Integer
Dim e(500) As Integer
Dim n As Long
Dim sr As Long
Dim swich As Long
Dim z As Integer
Dim begintime As Date
Dim endtime As Date

n = InputBox("n=")
Max = 100
Min = -100
Randomize
begintime = Timer
swich = 0
sr = 0
minim = 1
maxim = n
z = Int((maxim) * Rnd() + minim)
t = a(z)

line1: c1 = 1
d1 = 1
i = 1

Do While i <= n
If a(i) <= t Then b(c1) = a(i): c1 = c1 + 1: sr = sr + 1
If a(i) > t Then e(d1) = a(i): d1 = d1 + 1: sr = sr + 1
i = i + 1
Loop

m1 = c1 - 1
m2 = d1 - 1
swich = swich + m1 + m2
j = 1

Do While j <= m1
a(j) = b(j)
j = j + 1
Loop

k = 1

Do While k <= m2
a(m1 + k) = e(k)
k = k + 1
Loop

l = 1

Do
If a(l) > a(l + 1) Then sr = sr + 1: t = a(l + 1): GoTo line1
l = l + 1
sr = sr + 1
Loop While l <= n - 1

endtime = Timer
alltime = endtime - begintime

End Sub

часть 2:

Private Sub CommandButton1_Click()
Dim a(200) As Integer
Dim b(200) As Integer
Dim e(200) As Integer
Dim n As Long
Dim sr As Long
Dim swich As Long
Dim z As Integer
Dim begintime As Date
Dim endtime As Date
Dim sfile
Dim rt As String
rt = "Быстрая сортировка"
n = InputBox("n=")
Max = 100
Min = -100
Randomize

For f = 1 To n
a(f) = Int((Max - Min) * Rnd() + Min)
Worksheets("Лист2").Cells(f, 3).Value = a(f)
Worksheets("Лист2").Cells(f, 2).Value = f
Next f

sfile = InputBox("Введите имя файла и путь для сохранения в нем результатов сортировки")

begintime = Timer

swich = 0
sr = 0
minim = 1
maxim = n

Randomize

z = Int((maxim) * Rnd() + minim)
t = a(z)
line1: c1 = 1
d1 = 1
i = 1
k = 1
l = 1

Do While i <= n
If a(i) <= t Then b(c1) = a(i): c1 = c1 + 1: sr = sr + 1
If a(i) > t Then e(d1) = a(i): d1 = d1 + 1: sr = sr + 1
i = i + 1
Loop

m1 = c1 - 1
m2 = d1 - 1
swich = swich + m1 + m2
j = 1

Do While j <= m1
a(j) = b(j)
j = j + 1
Loop

Do While k <= m2
a(m1 + k) = e(k)
k = k + 1
Loop
For m = 1 To n
Worksheets("Лист2").Cells(m, 6).Value = a(m)
Worksheets("Лист2").Cells(m, 5).Value = m
Next m


Do
If a(l) > a(l + 1) Then sr = sr + 1: t = a(l + 1): GoTo line1
l = l + 1
sr = sr + 1
Loop While l <= n - 1

endtime = Timer

Open sfile For Output As #1
Write #1, rt
For m = 1 To n
Write #1, a(m)
Worksheets("Лист2").Cells(m, 6).Value = a(m)
Worksheets("Лист2").Cells(m, 5).Value = m
Next m
Close #1

Worksheets("Лист2").Cells(3,.Value = endtime - begintime
Worksheets("Лист2").Cells(4,.Value = sr
Worksheets("Лист2").Cells(5,.Value = swich

End Sub

Private Sub CommandButton2_Click()

For i = 1 To 500
Worksheets("Лист2").Cells(i, 2).Clear
Worksheets("Лист2").Cells(i, 3).Clear
Worksheets("Лист2").Cells(i, 6).Clear
Worksheets("Лист2").Cells(i, 5).Clear
Worksheets("Лист2").Cells(3,.Clear
Worksheets("Лист2").Cells(4,.Clear
Worksheets("Лист2").Cells(5,.Clear
Next

End Sub