数组:3 7 6 8 1 从大到小排序后是 8 7 6 3 1,怎样在一个新数组中输出在原数组中的位置:3 1 2 0 4

解决方案 »

  1.   

    将数组原始状态保存到另外一个副本中。排序完成后再到原始数组中检索下位置不就行了吗?
    再或者就用结构体数组:
    private type xxx
      intVaule%
      intIndex%
    end typedim xxx(0 to 4)'初始化
    v=split("3 7 6 8 1"," ")
    for i=0 to 4
      xxx(i).intVaule=v(i)
      xxx(i).intIndex=i'记录原始位置
    next'对数组xxx()进行排序。这样不论怎么排序它的原始索引总是跟着不同的。
      

  2.   

    补充完整:
    Private Type xxx
      intVaule As Integer
      intIndex As Integer
    End TypeDim x(4) As xxxPrivate Sub Form_Load()
        Dim v, i%, j%, intMax%
        Dim t As xxx
        
        '初始化
        v = Split("3 7 6 8 1", " ")
        For i = 0 To 4
          x(i).intVaule = v(i)
          x(i).intIndex = i '记录原始位置
        Next    For i = 0 To 4
            For j = i To 4
                If x(j).intVaule > x(i).intVaule Then
                    t = x(j)
                    x(j) = x(i)
                    x(i) = t
                End If
            Next
        Next
        
        For i = 0 To 4
            Debug.Print x(i).intVaule & vbTab & "原始索引:" & x(i).intIndex
        Next
    End Sub
    ===================
    8   原始索引:3
    7   原始索引:1
    6   原始索引:2
    3   原始索引:0
    1   原始索引:4
      

  3.   

    使用跟踪数组。
    Private Sub Form_Load()
    Dim a0, a1, i As Byte, n As Byte, m As Byte, m0 As Byte, m1 As Byte, s0 As String, s1 As String
    a0 = Array(3, 7, 6, 8, 1, 0, 9)
    ReDim a1(UBound(a0))  'a1 = a0 也可'   跟踪数组
    For i = 0 To UBound(a0)
        a1(i) = i
    Next
    For i = 0 To UBound(a0)
        For n = i To UBound(a0)
            If a0(n) > a0(i) Then
                m0 = a0(i)
                a0(i) = a0(n)
                a0(n) = m0
                m1 = a1(i) '同时同步跟踪数组
                a1(i) = a1(n)
                a1(n) = m1
            End If
        Next
    Next
    For m = 0 To UBound(a1)
        s0 = s0 & a0(m)
        s1 = s1 & a1(m)
    Next
    Debug.Print s0 '排序后字符串
    Debug.Print s1 '排序后原顺序号
    End Sub
      

  4.   

    http://topic.csdn.net/u/20110210/06/9ae27d2c-756b-451c-9dae-66434ff236d7.html?26043
    用这里的第一个排序方法,不会对原数组造成影响。
      

  5.   

    你自己玩数字排序,不也是需要记住原来的顺序么?原来的顺序,需要保存在某处。最简单的办法就是用自定义类型来代替原来的纯数组,增加一个“原始索引”成员。例如:private type MYTYPE
        theValue as long     '元素的值
        theIndex as long     '元素的原始索引
    end type这样的话,第一次初始化时就以当前的索引填充一下theIndex成员,以后要知道某个theValue是原来的哪个位置,只需要访问theIndex成员就行了,不需要再有一个查询的过程,大量数据时有效率优势,只不过内存占多了。看你自己如何取舍了。