Сортировка методом Шелла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Crazy_shark
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 07.12.2007 (Пт) 15:39

Сортировка методом Шелла

Сообщение Crazy_shark » 02.06.2008 (Пн) 20:36

в общем дали мне курсач по этой теме, сделал я его таким образом:
Код: Выделить всё

Dim a(1 To 20)
Private Sub Comumd1_Click()
n = Val(Text1)
av = Split(Text2, " ")
Foe i = 1 TO n
a(i) = Val(av(i - 1))
Next
d = 1
Do Whlle n \ 2 > d     
d = 2 * d
Loop
Do While d <> О
Picture2.Print " d= "; d
For i = 1 To n - d
If a(i) > a(i + d) Then
buf = a(i)
A(i) = a(i+d)
a(i+d) = buf
End If      
Next      
d = d \   2   
For k =   1 To n
Picture1.Print a(k)
Next      
Picture1.Print;
Loop      
End Sub

Показал преподу - сказал переделать под вот такой интерфейс с помощью MSFlexGrid, но работать с ним я совсем не умею( помогите пожалуйста, что в коде заменить надо
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.06.2008 (Вт) 7:53

Вместо Picture.Print задавай свойства Row и Col грида и указывай свойство Text. Либо сразу задавай TextMatrix.
Lasciate ogni speranza, voi ch'entrate.

Crazy_shark
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 07.12.2007 (Пт) 15:39

Сообщение Crazy_shark » 03.06.2008 (Вт) 10:11

А поточнее? Прост я совсем не умею с гридом работать :oops:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 03.06.2008 (Вт) 10:27

Куда уж точнее то. Допустим у тебя есть грид grdSortShell с тремя столбцами и одиннадцатью строками. Тогда для того, чтобы в третью колонку и пятую строку записать число используй такой код:
Код: Выделить всё
grdSortShell.Col = 2    ' номер столбца, нумерация с 0.
grdSortShell.Row = 4   ' номер строки, нумерация с 0.
grdSortShell.Text = 28 ' записываемое число
Весь мир матрица, а мы в нем потоки байтов!

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 03.06.2008 (Вт) 11:21

У меня дома есть некий интерфейс и в нём есть 8 методов сортировки включая метод шелла. Если надо могу скинуть, делал недавно.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 03.06.2008 (Вт) 15:56

StimorolD3DX, вроде автор не спрашивал про то как ему реализовать метод Шелла.
Весь мир матрица, а мы в нем потоки байтов!

Crazy_shark
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 07.12.2007 (Пт) 15:39

Сообщение Crazy_shark » 05.06.2008 (Чт) 6:07

Вот переделали мне бинарные вставки под Грид, посмотрите, все ли верно и какой в данном случае код мне надо вставлять чтоб получить метод Шелла

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.06.2008 (Чт) 8:07

Crazy_shark писал(а):Вот переделали мне бинарные вставки под Грид, посмотрите, все ли верно и какой в данном случае код мне надо вставлять чтоб получить метод Шелла
А на что посмотреть то?
Весь мир матрица, а мы в нем потоки байтов!

Crazy_shark
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 07.12.2007 (Пт) 15:39

Сообщение Crazy_shark » 05.06.2008 (Чт) 14:21

Оу) сори, код забыл вставить
:oops:
Код: Выделить всё
Private Sub Col_Rownomer()
Dim i As Integer
For i = 0 To (msfg.Rows - 1)
msfg.TextMatrix(i, 0) = i
Next i
i = 0
msfg.ColWidth(i) = 480
For i = 1 To (msfg.Cols - 1)
msfg.TextMatrix(0, i) = i
msfg.ColWidth(i) = 960
Next i
End Sub
Private Sub RowColsAvto()
Dim i As Long
For i = 0 To msfg.Rows - 1
msfg.RowHeight(i) = 240
Next i
For i = 1 To msfg.Cols - 1
msfg.ColWidth(i) = 1300
Next i
End Sub
Private Sub btAdd_Click()
Dim x As Long
On Error GoTo Handler
If IsNumeric(Text1.Text) Then
x = CLng(Text1.Text)
If x > 0 And x <= 100 Then
  sctm10 = sctm10 + 1
  m10(sctm10) = x
  msfg.TextMatrix(sctm10, 1) = x
  If sctm10 = UBound(m10) Then
   btAdd.Enabled = False
   btBinar.Enabled = True
  End If
End If
End If
Handler:
If Err.Number <> 0 Then
Err.Clear
End If
Text1 = ""
Text1.SetFocus
End Sub
Private Sub btBinar_Click()
Dim i As Integer
BinaryInsertionSort m10, UBound(m10)
For i = LBound(m10) To UBound(m10)
msfg.TextMatrix(i, 2) = m10(i)
Next i
Handler:
If Err.Number <> 0 Then
Err.Clear
End If
End Sub


alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.06.2008 (Чт) 14:24

Кошмар.
Работа с данными непосредственно на гриде съест всю производительность алгоритма.
Оставь массивы, просто в самом конце информацию из массива выведи в грид.
Lasciate ogni speranza, voi ch'entrate.

Crazy_shark
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 07.12.2007 (Пт) 15:39

Сообщение Crazy_shark » 05.06.2008 (Чт) 14:34

Я не умею работать с гридом, но требуют его обязательно, поэтомуу можно ли более точно что и куда перенести. И што вче таки делать с Шеллом?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.06.2008 (Чт) 14:42

Я же написал в первом же моем сообщении.
Оставь свой прежний код, только вместо Picture.Print выводи результаты в грид.
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.06.2008 (Чт) 15:01

Crazy_shark,
Пример использования грида. С Шеллом больше ничего делать не надо.
Весь мир матрица, а мы в нем потоки байтов!

Crazy_shark
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 07.12.2007 (Пт) 15:39

Сообщение Crazy_shark » 05.06.2008 (Чт) 16:14

С гридом все сделал) спасибо большое)

Crazy_shark
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 07.12.2007 (Пт) 15:39

Сообщение Crazy_shark » 05.06.2008 (Чт) 17:34

Я понимаю, что уже достал, но скажите как сравнительный график методов сделать. Шелла и бинарных вставок

Представить на графике зависимость времени выполнения данных методов сортировки (ось у) от кол-ва элементов (ось х). Исходные данные задаются с помощью генератора случайных чисел. Исследовать массибы с кол-вом элементов от 500 до 5000 с шагом 50


как я понял: задаю массив, задаю масштаб, делаю координатные, а вот как обратиться к методам через функцию?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

    TopList