欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Basic4android 的一个简单的排序例子,basic4android排序

来源: 开发者 投稿于  被查看 15185 次 评论:86

Basic4android 的一个简单的排序例子,basic4android排序


Basic4android 是一个简单但功能强大的 Android 应用开发环境。Basic4android 语言跟 Visual Basic 予以类似,支持更多的对象。Basic4android 将代码编译成 Android 原生应用,无需其他运行环境的支持。该工具完全为了 Android 应用开发,不支持其他平台。

1.[文件] Sorting.zip~6KB 下载(149)

2.[图片] sorting_1.png

3.[ASP/Basic]代码

'Activity module
Sub Process_Globals
    Type TreeElement(Value As Int, Left As TreeElement, Right As TreeElement)
End Sub

Sub Globals
    Dim lv As ListView
    Dim data(100) As Int
End Sub

Sub Activity_Create(FirstTime As Boolean)
    lv.Initialize("lv")
    Activity.AddView(lv, 0, 0, 100%x, 100%y)
    lv.SingleLineLayout.Label.TextSize = 13
    lv.SingleLineLayout.ItemHeight = 40dip
    FillWithRandomNumbers
    DisplayData
    Activity.AddMenuItem("Randomize", "mnuRandomize")
    Activity.AddMenuItem("Bubble Sort", "mnuBubbleSort")
    Activity.AddMenuItem("Quick Sort", "mnuQuickSort")
    Activity.AddMenuItem("Merge Sort", "mnuMergeSort")
    Activity.AddMenuItem("Selection Sort", "mnuSelectionSort")
    Activity.AddMenuItem("Binary Tree Sort", "mnuBinaryTreeSort")
End Sub
Sub lv_ItemClick (Position As Int, Value As Object)
    Activity.OpenMenu
End Sub

Sub FillWithRandomNumbers
    For i = 0 To data.Length - 1
        data(i) = Rnd(0, 10000)
    Next
End Sub

Sub DisplayData
    lv.Clear
    For i = 0 To data.Length - 1
        lv.AddSingleLine(data(i))
    Next
End Sub
Sub mnuRandomize_Click
    FillWithRandomNumbers
    DisplayData
End Sub

Sub mnuBubbleSort_Click
    Dim s As Long
    s = DateTime.Now
    BubbleSort
    ToastMessageShow("Bubble Sort took: " & (DateTime.Now - s) & " ms", False)
    DisplayData
End Sub

Sub mnuQuickSort_Click
    Dim s As Long
    s = DateTime.Now
    QuickSort(0, data.Length - 1)
    ToastMessageShow("Quick Sort took: " & (DateTime.Now - s) & " ms", False)
    DisplayData
End Sub

Sub mnuMergeSort_Click
    Dim s As Long
    s = DateTime.Now
    data = MergeSort(data)
    ToastMessageShow("Merge Sort took: " & (DateTime.Now - s) & " ms", False)
    DisplayData
End Sub

Sub mnuSelectionSort_Click
    Dim s As Long
    s = DateTime.Now
    SelectionSort
    ToastMessageShow("Selection Sort took: " & (DateTime.Now - s) & " ms", False)
    DisplayData
End Sub

Sub mnuBinaryTreeSort_Click
    Dim s As Long
    s = DateTime.Now
    Dim root As TreeElement
    root.Initialize
    root.Value = data(0)
    For i = 1 To data.Length - 1
        InsertTreeElement(root, data(i))
    Next
    TraverseTree(root, 0)
    ToastMessageShow("Binary Tree Sort took: " & (DateTime.Now - s) & " ms", False)
    DisplayData
End Sub

Sub Swap(index1 As Int, index2 As Int)
    Dim temp As Int
    temp = data(index1)
    data(index1) = data(index2)
    data(index2) = temp
End Sub

Sub BubbleSort
    Dim swapped As Boolean
    swapped = True
    Do While swapped
        swapped = False
        For i = 1 To Data.Length - 1
            If data(i - 1) > data(i) Then
                Swap(i-1, i)
                swapped = True
            End If
        Next
    Loop
End Sub

Sub SelectionSort
    Dim minIndex As Int
    For i = 0 To data.Length - 1
        minIndex = i
        For j = i + 1 To data.Length - 1
            If data(j) < data(minIndex) Then minIndex = j
        Next
        Swap(i, minIndex)
    Next
End Sub

Sub QuickSort (left As Int, right As Int)
    If right > left Then
        Dim pivotIndex, pivotNewIndex As Int
        pivotIndex = Rnd(left, right + 1) 'max value is exclusive
        pivotNewIndex = Partition(left, right, pivotIndex)
        QuickSort(left, pivotNewIndex - 1)
        QuickSort(pivotNewIndex + 1, right)
    End If
End Sub

Sub Partition (left As Int, right As Int, pivotIndex As Int) As Int
    Dim pivotValue, storeIndex As Int
    pivotValue = data(pivotIndex)
    Swap(pivotIndex, right)
    storeIndex = left
    For i = left To right - 1
        If data(i) <= pivotValue Then
            Swap(i, storeIndex)
            storeIndex = storeIndex + 1
        End If
    Next
    Swap(storeIndex, right)
    Return storeIndex
End Sub

Sub MergeSort(arr() As Int) As Int()
    If arr.Length <= 1 Then Return arr
    Dim middle As Int
    middle = arr.Length / 2
    Dim left(middle) As Int
    Dim right(arr.Length - middle) As Int
    For i = 0 To middle - 1
        left(i) = arr(i)
    Next
    For i = middle To arr.Length - 1
        right(i - middle) = arr(i)
    Next
    left = MergeSort(left)
    right = MergeSort(right)
    Return Merge(left, right)
End Sub

Sub Merge(left() As Int, right() As Int) As Int()
    Dim leftIndex, rightIndex As Int 'initialized to 0
    Dim result(left.Length + right.Length) As Int
    For i = 0 To result.Length - 1
        If rightIndex = right.Length OR _ 
            (leftIndex < left.Length AND left(leftIndex) < right(rightIndex)) Then
            result(i) = left(leftIndex)
            leftIndex = leftIndex + 1
        Else
            result(i) = right(rightIndex)
            rightIndex = rightIndex + 1
        End If
    Next
    Return result
End Sub

Sub InsertTreeElement(Parent As TreeElement, Value As Int)
    Dim leaf As TreeElement
    If Parent.IsInitialized = False Then
        Parent.Initialize
        Parent.Value = Value
    Else If Value < Parent.Value Then
        InsertTreeElement(Parent.Left, Value)
    Else
        InsertTreeElement(Parent.Right, Value)
    End If
End Sub

Sub TraverseTree (Parent As TreeElement, ArrayIndex As Int) As Int
    If Parent.IsInitialized = False Then Return ArrayIndex
    ArrayIndex = TraverseTree(Parent.Left, ArrayIndex)
    Data(ArrayIndex) = Parent.Value
    ArrayIndex = ArrayIndex + 1
    ArrayIndex = TraverseTree(Parent.Right, ArrayIndex)
    Return ArrayIndex
End Sub

用户评论