Сортировка в ручную

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Widunder
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 24.08.2010 (Вт) 22:09

Сортировка в ручную

Сообщение Widunder » 25.08.2010 (Ср) 1:20

Здравствуйте. Я новичок в работе с ВБ.НЕТ, и такая проблема. Идея такова, что Юзер вписывает числа поочередно в текстБокс, которые записываются в листБокс и записываются в массив при нажатии на кноку Add, например:
0
-Add
5
-Add
9
-Add
6
-Add
8

При нажатии на кнопку Sort By Fastest, числа должны отсортироваться от меньшего до большего и вывести ответ:
0
5
6
8
9

Это примерные числа, которые задает юзер. Проблема в том, что я не знаю как сделать так, чтобы числа записывались в массив, а потом в таком же - уже посчитаном порядке выводились в листБокс.
Мой код:
Код: Выделить всё
Partial Public Class _Default
    Inherits System.Web.UI.Page

    Private min As Integer
    Private max As Integer
    Private values() As Integer
    Private Const max_val As Integer = 50
    Private i As Integer
    Private counter As Integer

    Public Sub FastestSort(ByVal List() As Integer, ByVal min As Integer, ByVal max As Integer)
        'ByVal List() As Integer,
        Dim random_number As New Random
        Dim avg As Integer
        'Dim i As Integer
        Dim low As Integer
        Dim high As Integer

        'if minimum is >= max, then there is nothing to sort
        If min >= max Then
            Exit Sub
        End If


        ' randomize i to select a random number as a starter and use it as a divider
        i = Int((max - min + 1) * Rnd() + min)
        avg = List(i)

        ' Swap it to the front.
        List(i) = List(min)

        low = min
        high = max

        Do
            ' Look down from hi for a value < med_value.
            Do While List(high) >= avg
                high = high - 1
                If high <= low Then Exit Do
            Loop
            If high <= low Then
                List(low) = avg
                Exit Do
            End If
            ' Swap the lo and hi values.
            List(low) = List(high)

            ' increase the lowest number to look for the next one, while it's lower than average
            ' keep increasing till we got it
            low = low + 1
            Do While List(low) < avg
                low = low + 1
                If low >= high Then Exit Do
            Loop
            If low >= high Then
                low = high
                List(high) = avg
                Exit Do
            End If

            ' Swap the low and high values.
            List(high) = List(low)
        Loop

        For j As Integer = 0 To counter
            FastestSort(List, min, low - 1)
            FastestSort(List, low + 1, max)
        Next
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAdd.Click
        Dim lapTime As Integer
        Dim lapNum As Integer

        Integer.TryParse(txtLapNum.Text, lapNum)
        Integer.TryParse(txtLapTime.Text, lapTime)

        'each time we click, we add time to the list
        lbList.Items.Add(lapTime)
        List(i) = txtLapTime.Text
    End Sub

    Protected Sub btnFastest_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnFastest.Click

        Dim i As Integer
        Dim txt As String

        ' pass the parameters
        FastestSort(values, 0, max_val)


    End Sub
End Class


Идея состоит в том, что главное это использование алгоритма, сделать это в ручную, а не через .Sort()
Пожалуйста помогите. Другие предложения тоже принимаются о том, как это можно сделать. Мне не смогли помочь на других форумах. Все что я хочу это код. О том, каким способом сделать, а не то что надо бы сделать. То, что я хочу от программы я и сама знаю.
Заранее спасибо.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Сортировка в ручную

Сообщение FireFenix » 25.08.2010 (Ср) 1:43

Код: Выделить всё
    Private SubTest()
        Dim List As New System.Collections.Generic.List(Of Integer)

        List.Add(0)
        List.Add(5)
        List.Add(66)
        List.Add(8)
        List.Add(-1)

        List.Sort(AddressOf ComparerAsc)

        For i = 0 To List.Count - 1
            Console.WriteLine(List(i))
        Next

        Console.WriteLine()
        List.Sort(AddressOf ComparerDesc)

        For i = 0 To List.Count - 1
            Console.WriteLine(List(i))
        Next
    End Sub

    Public Function ComparerAsc(ByVal x As Integer, ByVal y As Integer) As Boolean
        If y > x Then Return True

        Return False
    End Function

    Public Function ComparerDesc(ByVal x As Integer, ByVal y As Integer) As Boolean
        If x > y Then Return True

        Return False
    End Function


Код: Выделить всё
-1
0
5
8
66

66
8
5
0
-1

Если нужен алгоритм, то покури http://ru.wikipedia.org/wiki/%D0%90%D0% ... 0%BA%D0%B8
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Widunder
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 24.08.2010 (Вт) 22:09

Re: Сортировка в ручную

Сообщение Widunder » 30.08.2010 (Пн) 3:44

Мне это моей проблеме не поможет. Я уже смотрела, искала, ничего не нашла. Прочитайте пожалуйста мое сообщение и помогите по делу.

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

Re: Сортировка в ручную

Сообщение Viper » 30.08.2010 (Пн) 5:20

Widunder писал(а):Мне это моей проблеме не поможет. Я уже смотрела, искала, ничего не нашла. Прочитайте пожалуйста мое сообщение и помогите по делу.
По ссылке есть описания всех основных алгоритмов сортировки, готового кода там понятно нет. И да, там есть ссылки на нужную литературу. А код можно найти здесь или здесь. Не уверен, что там есть код на VB.NET, но на VB6 должен быть точно.
Весь мир матрица, а мы в нем потоки байтов!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Сортировка в ручную

Сообщение Nord777 » 30.08.2010 (Пн) 6:40

Viper, зря стараешься.
Widunder писал(а):Все что я хочу это код.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

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

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

    TopList