`
ihuashao
  • 浏览: 4725719 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

利用集合进行数组的排序

阅读更多

笔者在学习VB中发现利用集合可以进行排序,优化后比冒泡法快得多。下面是完整的函数代码,演示了如何进行数组的升序或降序排列。

Option Explicit
Dim X(100) As Double
Dim y(100) As String
Private Sub Command1_Click() '演示数字排序
Dim a(100) As Double, z(100) As String, i As Long
For i = 0 To 100
a(i) = X(i) '复制数组
z(i) = CStr(X(i)) '转化为字符串数组
Next
MsgBox Join(z, ","), 64, "原始数组" '显示原始顺序

NUMBERSORT X, "up"
For i = 0 To 100
z(i) = CStr(X(i)) '转化为字符串数组
Next
MsgBox Join(z, ","), 64, "按数字升序排序后数组" '显示排序结果

NUMBERSORT a, "down"
For i = 0 To 100
z(i) = CStr(a(i)) '转化为字符串数组
Next
MsgBox Join(z, ","), 64, "按数字降序排序后数组" '显示排序结果

End Sub
Sub NUMBERSORT(ByRef a() As Double, Optional sort As String = "up") '数字排序
Dim min As Long, max As Long, num As Long, first As Long, last As Long, temp As Long, all As New Collection, steps As Long
min = LBound(a)
max = UBound(a)
all.Add a(min)
steps = 1
For num = min + 1 To max
last = all.Count
If a(num) < CDbl(all(1)) Then all.Add a(num), BEFORE:=1: GoTo nextnum '加到第一项
If a(num) > CDbl(all(last)) Then all.Add a(num), AFTER:=last: GoTo nextnum '加到最后一项


first = 1
Do While last > first + 1 '利用DO循环减少循环次数
temp = (last + first) \ 2
If a(num) > CDbl(all(temp)) Then
first = temp
Else
last = temp
steps = steps + 1
End If
Loop
all.Add a(num), BEFORE:=last '加到指定的索引

nextnum:
steps = steps + 1
Next
For num = min To max
If sort = "UP" Or sort = "up" Then a(num) = CDbl(all(num - min + 1)): steps = steps + 1 '升序
If sort = "DOWN" Or sort = "down" Then a(num) = CDbl(all(max - num + 1)): steps = steps + 1 '降序
Next
MsgBox "本数组共经过 " & steps & "步实现" & IIf(sort = "UP" Or sort = "up", "升序", "降序") & "排序!", 64, "INFORMATION"
Set all = Nothing
End Sub

Sub STRINGSORT(ByRef a() As String, Optional sort As String = "UP") '字符串排序
Dim min As Long, max As Long, num As Long, first As Long, last As Long, temp As Long, all As New Collection, steps As Long
min = LBound(a)
max = UBound(a)
all.Add a(min)
steps = 1
For num = min + 1 To max

first = 1
last = all.Count
If a(num) < all(1) Then all.Add a(num), BEFORE:=1: GoTo nextnum '加到第一项
If a(num) > all(last) Then all.Add a(num), AFTER:=last: GoTo nextnum '加到最后一项


Do While last > first + 1 '利用DO循环减少循环次数
temp = (last + first) \ 2
If a(num) > all(temp) Then
first = temp
Else
last = temp
steps = steps + 1
End If
Loop
all.Add a(num), BEFORE:=last '加到指定的索引

nextnum:
steps = steps + 1
Next
For num = min To max
If sort = "UP" Or sort = "up" Then a(num) = all(num - min + 1): steps = steps + 1 '升序
If sort = "DOWN" Or sort = "down" Then a(num) = all(max - num + 1): steps = steps + 1 '降序
Next
MsgBox "本数组共经过 " & steps & "步实现" & IIf(sort = "UP" Or sort = "up", "升序", "降序") & "排序!", 64, "INFORMATION"
Set all = Nothing
End Sub


Private Sub Command2_Click() '演示字符串排序
Dim z(100) As String, i As Long '复制数组
For i = 0 To 100
z(i) = y(i)
Next


MsgBox Join(y, ","), 64, "原始数组" '显示原始顺序

STRINGSORT y, "UP"
MsgBox Join(y, ","), 64, "按字符串升序排序后数组" '显示排序结果


STRINGSORT z, "DOWN"
MsgBox Join(z, ","), 64, "按字符串降序排序后数组" '显示排序结果
End Sub

Private Sub Command3_Click() ' 排序计时
Dim a(3000) As String, i As Long, starttime As Long, endtime As Long
For i = 0 To 3000
a(i) = Chr(Int(Rnd * 26) + 65) & Chr(Int(Rnd * 26) + 65) & Chr(Int(Rnd * 26) + 65) & Chr(Int(Rnd * 26) + 65) & Chr(Int(Rnd * 26) + 65) & Chr(Int(Rnd * 26) + 65) '生成随机6字符的字符串
Next
starttime = Timer '计时开始
STRINGSORT a
endtime = Timer '计时结束
MsgBox "排序共耗时 " & endtime - starttime & " 秒!"
End Sub

Private Sub Form_Load()
Randomize
Dim i As Long
For i = 0 To 100
X(i) = Format(Rnd * 1000, "0.00")
y(i) = Chr(Int(Rnd * 26) + 65) & Chr(Int(Rnd * 26) + 65) & Chr(Int(Rnd * 26) + 65)
Next
End Sub


分享到:
评论

相关推荐

    数组和集合的排序.rar

    2. **数组排序方法**: - **冒泡排序**:通过不断交换相邻两个元素来实现排序,效率较低,适用于小规模数据。 - **选择排序**:每次找出未排序部分的最小(大)值,放在已排序部分的末尾,适合数据量较小的情况。 ...

    数组排序知识代码(c#)

    总的来说,掌握数组排序是C#编程中的基本技能,无论是简单的插入排序,还是利用`Array.Sort()`和`System.Linq`的功能,都能帮助开发者更有效地处理和分析数据。通过实践和理解这些排序算法,可以提高代码性能和...

    无序数组排序

    无序数组排序是指对一个没有特定顺序的元素集合进行重新排列,使其按照某种规则(如升序或降序)呈现有序状态。这个过程涉及到多种排序算法,每种都有其独特之处,适用于不同的场景和性能需求。 在“将文本框的字符...

    数组以及排序算法

    4. 快速排序:利用分治策略,选取一个基准元素,将数组分为两部分,一部分所有元素小于基准,另一部分所有元素大于基准,然后递归对这两部分进行快速排序。平均时间复杂度为O(n log n),最坏情况为O(n^2)。 5. 归并...

    易语言文本数组排序集成

    在这个“易语言文本数组排序集成”项目中,我们主要关注的是如何使用易语言处理文本数组,并实现排序功能。 在计算机科学中,数组是一种数据结构,它能存储相同类型的数据元素集合。文本数组则专门用于存储字符串...

    c#实现对泛型数组排序

    例如,你可以使用泛型的List来存储和操作数据,然后利用LINQ的`OrderBy()`或`OrderByDescending()`方法进行排序: ```csharp List&lt;Person&gt; peopleList = new List(people); var sortedPeople = peopleList.OrderBy...

    JAVA 对象数组按照多个属性进行排序

    在Java编程中,对象数组排序是一项常见的任务,特别是在处理复杂数据结构时。当我们需要根据对象的多个属性进行排序时,情况会变得稍微复杂。本文将深入探讨如何在Java中实现这个功能,结合给出的标签“源码”和...

    易语言源码挂号法-自定义数据数组排序.rar

    3. 调用排序函数:利用易语言提供的排序函数,如`数组排序`,传入自定义数据数组和比较函数。 4. 考虑性能:在处理大数据量时,优化排序算法的效率是非常重要的。挂号法可能在这方面有所优化,需要分析源码以了解其...

    A.3.4 数组排序和计算(Console).zip

    WPF(Windows Presentation Foundation)虽然在标签中被提及,但在这里可能并不直接相关,因为WPF主要是用于构建图形用户界面的,而数组排序和计算通常在后台逻辑中进行。 数组是存储相同类型数据集合的数据结构,...

    基于listbox控件显示随机数数组排序结果

    以上就是基于ListBox控件显示随机数数组排序结果的主要步骤和涉及的技术点。实践中,还需要考虑错误处理、用户交互设计等因素,以确保程序的稳定性和用户体验。同时,理解和熟练运用这些概念,对于开发高效且用户...

    数组排序(VB6.0源代码编写)

    在VB6.0编程环境中,数组排序是一项基本且重要的任务,尤其在处理数据集合时。本教程将深入探讨如何利用VB6.0源代码实现数组的排序,特别是去除非升序元素并将其重新分配到新数组的过程。 首先,我们要了解数组的...

    泛型集合与数组应用老师找学生

    比如,可以使用泛型集合的Sort()方法对学生成绩进行排序,或者利用Linq(Language Integrated Query)来筛选出特定条件的学生。此外,数组和泛型集合都支持迭代,可以方便地遍历所有学生进行操作。 总之,泛型集合...

    VB 数组做形参排序

    本篇文章将深入探讨如何在VB中利用数组作为函数参数进行排序。 一、数组基础知识 在VB中,数组可以是一维或多维的,一维数组类似于一个列表,而多维数组则可以看作是表格。创建数组通常通过Dim语句完成,例如: ``...

    java大作业用数组进行队列排序

    在Java编程中,大作业通常涉及实际应用中的问题解决,这次的任务是利用数组实现一个队列排序,并且能够动态地插入新的元素。这个任务主要涵盖了两个核心知识点:数组的使用和排序算法。下面将详细解释这两个方面。 ...

    利用指针数组冒泡法排序

    `bubbleSort`函数接收一个整型指针数组和其大小作为参数,然后进行排序。 在实际应用中,我们还需要考虑内存管理。在排序完成后,别忘了释放之前分配的内存以避免内存泄漏: ```cpp for (int i = 0; i ; ++i) { ...

    易语言数组排序算法集合源码-易语言

    这个"易语言数组排序算法集合源码"是针对易语言编程者的一个进阶教程资源,包含了各种数组排序算法的实现,对于学习和理解算法有着重要的作用。 数组排序是计算机科学中的基本问题,无论是在数据处理、数据分析还是...

    根据 Java 中任何给定列中的值对二维数组进行排序.docx

    总之,根据Java中任何给定列的值对二维数组进行排序,可以通过利用`Arrays.sort()`函数结合Lambda表达式或自定义Comparator来实现。这种方法不仅适用于基本类型数组,还可以扩展到其他类型的对象数组,只要提供合适...

    JAVA数组的排序方法实例.docx

    5. 利用 `Arrays.sort(array)` 对数组进行递增排序。这个方法内部实现了高效的快速排序或归并排序算法,效率远高于冒泡排序。 6. 输出排序后的数组。 两种排序方法各有优缺点。冒泡排序算法简单,易于理解,但效率...

    易语言-文本数组排序

    在这个主题“易语言-文本数组排序”中,我们将探讨如何在易语言中对文本数组进行排序,以及相关的核心概念和技术。 首先,我们要了解数组的概念。在计算机科学中,数组是一种数据结构,它存储同一类型的数据集合,...

    用一维数组表现的顺序存储结构

    一维数组可以看作是在内存中分配的一系列相同类型的变量集合,它们通过索引进行区分。数组的索引通常从0开始,因此,一个包含n个元素的数组,其索引范围是0到n-1。数组元素的访问时间复杂度为O(1),因为内存地址...

Global site tag (gtag.js) - Google Analytics