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
用户评论