以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]自定义函数-如何利用二分法对一维数组进行排序 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=40084) |
||||
-- 作者:loongtai -- 发布时间:2013/9/9 9:22:00 -- [求助]自定义函数-如何利用二分法对一维数组进行排序 之前对一维数组排序采用的是新建临时表利用表的sort方法完成的,后来发现在项目中由于排序应用的频次特高,使得这部分占用的时间特长。所以换用二分法来排序,但在二分法排序中遇到的一个难题是:在程序中需对这个函数进行递归调用,而自定义函数中的其中一个参数是要排序的一维数组,而进行排序的是二维数组。我想过直接用二维数组作参数,但一是实际运用时一维数组较多,二是二维数组中某一维的长度我不会计算。闲话不多说,直接上项目吧。 程序在内部函数中。
[此贴子已经被作者于2013-9-9 9:28:02编辑过]
|
||||
-- 作者: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 没必要还建立临时表来排序.
|
||||
-- 作者:loongtai -- 发布时间:2013/9/9 9:45:00 -- 以下是引用Bin在2013-9-9 9:39:00的发言:
还有数组直接排序的方法呢,又学一招,谢谢了!不知道在帮助里有没有对数组稍微详细点的介绍,我在帮助里只在编程基础的基本概念里找到一页是介绍数组的,但没有介绍数组的属性和方法。
另外我在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中不知如何来得到?
数组排序其实这样就可以了. 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 -- 发布时间:2013/9/9 9:51:00 -- 以下是引用Bin在2013-9-9 9:39:00的发言:
另外用这种方式进行排序,可能还有的问题
1.默认升序排列,如何改成反序
2.排列后的数组中元素如何得到其在排序前位于数组的位置
数组排序其实这样就可以了. 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 没必要还建立临时表来排序.
|
||||
-- 作者:Bin -- 发布时间:2013/9/9 9:55:00 -- 你好,数组不需要在乎升序降序. 因为你可以顺循环,倒循环. 升序就循环0 to leng-1 降序就循环leng-1 to 0 |
||||
-- 作者:Bin -- 发布时间:2013/9/9 9:56:00 -- 你非要的话,也可以声明一个新的数组倒循环赋值给新的数组. |
||||
-- 作者:loongtai -- 发布时间: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 -- 发布时间: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 -- 发布时间: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 -- 发布时间:2013/9/9 10:47:00 -- 这个没有办法,除非你自己记录下来,但是数字都会有重复的,分不清的. |