Foxtable(狐表)用户栏目专家坐堂 → [求助]自定义函数-如何利用二分法对一维数组进行排序


  共有4595人关注过本帖树形打印复制链接

主题:[求助]自定义函数-如何利用二分法对一维数组进行排序

帅哥哟,离线,有人找我吗?
loongtai
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
[求助]自定义函数-如何利用二分法对一维数组进行排序  发帖心情 Post By:2013/9/9 9:22:00 [只看该作者]

之前对一维数组排序采用的是新建临时表利用表的sort方法完成的,后来发现在项目中由于排序应用的频次特高,使得这部分占用的时间特长。所以换用二分法来排序,但在二分法排序中遇到的一个难题是:在程序中需对这个函数进行递归调用,而自定义函数中的其中一个参数是要排序的一维数组,而进行排序的是二维数组。我想过直接用二维数组作参数,但一是实际运用时一维数组较多,二是二维数组中某一维的长度我不会计算。闲话不多说,直接上项目吧。
程序在内部函数中。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1-自定义函数-数组二分排序法.zip


[此贴子已经被作者于2013-9-9 9:28:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/9 9:39:00 [只看该作者]

数组排序其实这样就可以了.
Dim ii As Integer() = {7, 1, 3, 4}
        Array.Sort(ii)
        For i As Integer = 0 To ii.Length - 1
            MessageBox.Show(ii(i))
        Next
没必要还建立临时表来排序.

 回到顶部
帅哥哟,离线,有人找我吗?
loongtai
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
  发帖心情 Post By:2013/9/9 9:45:00 [只看该作者]

以下是引用Bin在2013-9-9 9:39:00的发言:
数组排序其实这样就可以了.
Dim ii As Integer() = {7, 1, 3, 4}
        Array.Sort(ii)
        For i As Integer = 0 To ii.Length - 1
            MessageBox.Show(ii(i))
        Next
没必要还建立临时表来排序.

还有数组直接排序的方法呢,又学一招,谢谢了!不知道在帮助里有没有对数组稍微详细点的介绍,我在帮助里只在编程基础的基本概念里找到一页是介绍数组的,但没有介绍数组的属性和方法。 另外我在http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=39806&page=1&star=1中所提的问题是这样的: 如果是二维数组是这样的,Dim a(,) = {{1, 2,4,5,7}, {2, 5,6,3,4}} 那如何得到其中的 {1, 2,4,5,7}的元素数量?又如何得到{2, 5,6,3,4}是处于这个数组的第几行? 在excel的VBA中,二维数组的某一维的元素数量可以用Ubound(a,2)来取得数组a的第二维的元素数量,在Foxtable中不知如何来得到?

 回到顶部
帅哥哟,离线,有人找我吗?
loongtai
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
  发帖心情 Post By:2013/9/9 9:51:00 [只看该作者]

以下是引用Bin在2013-9-9 9:39:00的发言:
数组排序其实这样就可以了.
Dim ii As Integer() = {7, 1, 3, 4}
        Array.Sort(ii)
        For i As Integer = 0 To ii.Length - 1
            MessageBox.Show(ii(i))
        Next
没必要还建立临时表来排序.

另外用这种方式进行排序,可能还有的问题 1.默认升序排列,如何改成反序 2.排列后的数组中元素如何得到其在排序前位于数组的位置

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/9 9:55:00 [只看该作者]

你好,数组不需要在乎升序降序.  因为你可以顺循环,倒循环.   升序就循环0 to leng-1 降序就循环leng-1 to 0

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/9 9:56:00 [只看该作者]

你非要的话,也可以声明一个新的数组倒循环赋值给新的数组.

 回到顶部
帅哥哟,离线,有人找我吗?
loongtai
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
  发帖心情 Post By:2013/9/9 10:04:00 [只看该作者]

以下是引用Bin在2013-9-9 9:56:00的发言:
你非要的话,也可以声明一个新的数组倒循环赋值给新的数组.

可能我表述的还不清楚的。假如说数组arr={7, 1, 3, 4},排序后的数组arr2是这样{1, 3, 4, 7}, 排序前7在数组中的位置是arr(0),排序后7在新数组arr2中的位置是arr2(3),但在arr2中无法判断7在arr中的位置。在实际工作中,数组元素排序前的位置这个很有用。

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/9 10:31:00 [只看该作者]

Dim ii As Integer() = { 7, 1, 3, 4 }
Array.Sort(ii)
Dim ii2(3) As Integer
Dim count As Integer = 0
For i As Integer = ii.Length - 1 To 0 Step -1
    ii2(count) = ii(i)
    count += 1
Next
For i As Integer = 0 To ii2.length-1
    MessageBox.show(ii2(i))
Next
非要反过来可以重新弄个数组嘛.

 回到顶部
帅哥哟,离线,有人找我吗?
loongtai
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:574 积分:4332 威望:0 精华:0 注册:2013/7/26 10:24:00
  发帖心情 Post By:2013/9/9 10:37:00 [只看该作者]

以下是引用Bin在2013-9-9 10:31:00的发言:
Dim ii As Integer() = { 7, 1, 3, 4 }
Array.Sort(ii)
Dim ii2(3) As Integer
Dim count As Integer = 0
For i As Integer = ii.Length - 1 To 0 Step -1
    ii2(count) = ii(i)
    count += 1
Next
For i As Integer = 0 To ii2.length-1
    MessageBox.show(ii2(i))
Next
非要反过来可以重新弄个数组嘛.

反序怎么弄我已经知道,我的意思是怎么得到元素在原来数组中的索引号。

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/9/9 10:47:00 [只看该作者]

这个没有办法,除非你自己记录下来,但是数字都会有重复的,分不清的.

 回到顶部
总数 14 1 2 下一页