添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

代码1:试图利用  strreverse 取反,但失败-----局限性太大

  • 好像没有数组直接反转的 函数
  • 我尝试利用strreverse转一下看看
  • 这个字符串取反strreverse,连10都变01,不可行,不是按单个元素取反序的。
  • 局限性较大
  • 少数情况,每个element 都是但字符的  但数字字母的也许可用。
Sub jackma_arrtest1()
'好像没有数组直接反转的 函数
'我尝试利用strreverse转一下看看
Dim arr1
arr1 = Array(1, 2, 3, 4, 5, 5, 5, 8, 9, 10, "5")
arr2 = Join(arr1, "-")
Debug.Print "arr2是变成了-相连的字符串", arr2
arr3 = StrReverse(arr2)
Debug.Print "arr2是取反的字符串"; arr3
arr4 = Split(arr3, "-")
For i = LBound(arr4) To UBound(arr4)
   Debug.Print arr4(i)
Debug.Print "很遗憾,这个字符串取反,连10都变01,不可行,不是按单个元素取反序的"
End Sub

代码2 成功代码: 我的想法就是 index反过来 从高到低

两种思路有小差异,都可以

  • 思路1:直接把原数组,倒序,写入另外一个新数组
  • 思路2:原数组,正序,倒着写入一个新数组---但这个要注意,写完了才能全部展示,否则错误
Sub ponymago1()
Dim arr1()
Dim arr2()
Dim arr3()
arr1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
ReDim arr2(UBound(arr1) - LBound(arr1))  '如果不 redim 下面使用时会报错越界
ReDim arr3(UBound(arr1) - LBound(arr1)) '如果不 redim 下面使用时会报错越界
k = 0
For i = UBound(arr1) To LBound(arr1) Step -1
  Debug.Print "arr1(" & i & ")=" & arr1(i); "  ";
  arr2(k) = arr1(i)
  Debug.Print "arr2(" & k & ")=" & arr2(k)
  k = k + 1
Debug.Print
j = 0
'  Debug.Print UBound(arr1)
'  Debug.Print LBound(arr1)
'  Debug.Print UBound(arr1) - LBound(arr1) + j
For i = LBound(arr1) To UBound(arr1)
  arr3(UBound(arr3) - LBound(arr3) + j) = arr1(i)
  Debug.Print "arr3(" & UBound(arr3) - LBound(arr3) + j & ")=" & arr3(UBound(arr3) - LBound(arr3) + j)
  j = j - 1
Debug.Print
For i = LBound(arr3) To UBound(arr3)
   Debug.Print "arr3(" & i & ")=" & arr3(i)
End Sub

代码3:正确逆序排列了2维数组

  • 数组遍历, for each  会先逐列遍历
  • 当用2个数组分别遍历的时,教训就是,两个数组的 循环变量,应该完全独立,这种错误犯了多次了
  • 记得你循环的起点,终点,方向(逆序,从大到小赋值就应该是  j1=j1-1)
  • 循环变量的插入位置,一定要注意
  • 参考过:  http://club.excelhome.net/thread-1120315-1-1.html
Sub charleszhang1() Dim arr2() arr1 = Range("d1:g3") 'Debug.Print LBound(arr1, 1) 'Debug.Print UBound(arr1, 1) 'Debug.Print LBound(arr1, 2) 'Debug.Print UBound(arr1, 2) '会先按第1列,第2列,数据逐步陈列数据 For Each x In arr1 Debug.Print x; Debug.Print For m = LBound(arr1) To UBound(arr1) For n = LBound(arr1, 2) To UBound(arr1, 2) Debug.Print arr1(m, n); Debug.Print Debug.Print i1 = LBound(arr1) ReDim arr2(LBound(arr1, 1) To UBound(arr1, 1), LBound(arr1, 2) To UBound(arr1, 2)) For i = LBound(arr1, 1) To UBound(arr1, 1) j1 = UBound(arr1, 2) For j = LBound(arr1, 2) To UBound(arr1, 2) ' arr2(i1, j1 + UBound(arr2, 2) - LBound(arr2, 2)) = arr1(i, j) arr2(i1, j1) = arr1(i, j) j1 = j1 - 1 ' arr2(i, j) = arr1(i, j) i1 = i1 + 1 Debug.Print For x = LBound(arr2) To UBound(arr2) For y = LBound(arr2, 2) To UBound(arr2, 2) Debug.Print arr2(x, y); Debug.Print Debug.Print End Sub
For x = LBound(arr1) To UBound(arr1) For y = LBound(arr1, 2) To UBound(arr1, 2) Debug.Print arr1(x, y); Debug.Print Debug.Print 'ReDim arr2(3, 4) ReDim arr2(LBound(arr1, 1) To UBound(arr1, 1), LBound(arr1, 2) To UBound(arr1, 2)) i1 = LBound(arr2) For i = LBound(arr1, 1) To UBound(arr1, 1) j1 = LBound(arr2, 2) For j = UBound(arr1, 2) To LBound(arr1, 2) Step -1 arr2(i1, j1) = arr1(i, j) Debug.Print arr2(i1, j1); j1 = j1 + 1 i1 = i1 + 1 Debug.Print End Sub

代码4:EXCEL表,逆序排列数据

Sub test5()
arr1 = Range("d1:g3")
For i = LBound(arr1, 1) To UBound(arr1, 1)
    k = 0
    l = 12
    For j = LBound(arr1, 2) To UBound(arr1, 2)
'        Cells(1, 9).Resize(UBound(arr1), UBound(arr, 2)) = arr1(i, j)
         Cells(i, 9 + k) = arr1(i, j)
         Cells(i + 5, l) = arr1(i, j)
         k = k + 1
         l = l - 1
End Sub
                    代码1:试图利用 strreverse 取反,但失败-----局限性太大好像没有数组直接反转的 函数	我尝试利用strreverse转一下看看	这个字符串取反strreverse,连10都变01,不可行,不是按单个元素取反序的。	局限性较大	少数情况,每个element 都是但字符的 但数字字母的也许可用。Sub jackma_arrtest1()'好像没有数组直接反...
思路三:交换前后两个数。
思路一:数组输出
/int[]nums={1,2,3,4,5};   For(int i= nums.length-1;i >= 0;i- -)     Printf(“%d”,a[i]);/
思路分析:对于一个给定长度与数组值的数组,实现其倒输出只需利用循环将最大数组下标依次递减输出即可。
思路二:定义一个新数组,倒赋值
/*int[]nums = {1,2,3,4,5};
Int[]newnums = n
				
快速排是最常见的排之一,其排方式容易理解,排代码也容易实现,排速度快,很受欢迎. 首先在了解快速排之前我们先了解一下冒泡排,冒泡排是相邻元素之间两两对比,按小数前大数后的规律调整两数的位置,经过多轮对比以后,即可完成排.宏观来看,其实就是大数往后小数往前的一种排方式,微观上冒泡排是一个个的对比.快速排是冒泡排的改进版型,快速排其实是将整个数据串以一个基准点分成大小两边,宏观上看也是大数往后小数往前,微观上,快排相对于冒泡一个个的对比而言是一种”批量操作”了. 现在我们来看看快
//将num1[0],num2[0]设置为返回结果 public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { int length = array.length;
我们平时用的表格排,只相对来说是在在表格中的升。今天就好奇如果系统中实现排 他是怎么实现的呢。 经过一番折腾查找,真是一看吓一跳,真是感觉蚂蚁看大象,发现排分为: 今天仅整理了最简单的两种排。。。 先来看下定义和实现的方法吧。 选择排(Selection sort)是一种简单直观的排算法。它的工作原理是:第一次从待排的数据元素中选出最小(或最大)的一个元素,存放在列的起始位置,然后再从剩余的未排元素中寻找到最小(大)元素,然后放到已排列的末尾。以此类推,直到全部待排的数据
数和排的思路是类似的,稳定的排算法都可以用来计算数。 最直接的方法,采用冒泡排和插入排的思路,一共需要遍历(n-1)*(n-2)次,比较慢。 利用归并排的思想加速这个过程。一个列的数等于它的两个递归子过程产生的数与合并过程产生的数之和。在合