VBA 二維陣列氣泡排序例項

2021-10-10 01:29:33 字數 2647 閱讀 6570

學習vba的同學經常會用到陣列的排序,網上介紹的程式演算法一般都是舉例一維陣列,

增加了公升降序選擇,排序列號選擇,以及標題行數等實際需要使用的引數

private sub test()

dim arr()

sheets("sheet1").select

row = sheets("sheet1").usedrange.rows.count

col = sheets("sheet1").usedrange.columns.count

redim arr(1 to row, 1 to 6)

arr = range("a1:f" & row)

arr = bubblesort(arr, 0, 2, 2)

range("j1:o" & row) = arr

end sub

以下為vba二維陣列氣泡排序例項

public function bubblesort(byref snarray(), sort as boolean, column as integer, title as integer)

'sort 為公升降序標記,column為需排序列,title為標題行數(不參與排序的行數)

dim iouter as long

dim iinner as long

dim ilbound as long

dim iubound as long

dim issort as boolean

dim count as integer

dim temp as integer

dim itemp

redim itemp(1, lbound(snarray, 2) to ubound(snarray, 2))

dim sorted as integer

lastindex = 0

tlbound = lbound(snarray, 2)

tubound = ubound(snarray, 2)

ilbound = lbound(snarray) + title

iubound = ubound(snarray)

sorted = iubound - iouter - 1

select case sort

case 0 '引數為0時公升序

for iouter = ilbound to iubound - 1

issort = true

for iinner = ilbound to sorted 'iubound - iouter - 1

if snarray(iinner, column) > snarray(iinner + 1, column) then

for temp = tlbound to tubound '陣列整行資料交換

itemp(1, temp) = snarray(iinner, temp)

snarray(iinner, temp) = snarray(iinner + 1, temp)

snarray(iinner + 1, temp) = itemp(1, temp)

next temp

issort = false  '標記是否有排序動作

count = count + 1   '記錄排序次數,可刪除

lastindex = iinner  '記錄最後排序位置

end if

next iinner

if issort = true then exit for   '如果沒有排序動作則為全部排序完成,跳出迴圈,排序結束

sorted = lastindex   '接下來的迴圈只到最後排序位置

next iouter

case 1 '引數為1時降序

for iouter = ilbound to iubound - 1

issort = true

for iinner = ilbound to sorted 'iubound - iouter - 1

if snarray(iinner, column) < snarray(iinner + 1, column) then

for temp = tlbound to tubound '陣列整行資料交換

itemp(1, temp) = snarray(iinner, temp)

snarray(iinner, temp) = snarray(iinner + 1, temp)

snarray(iinner + 1, temp) = itemp(1, temp)

next temp

issort = false  '標記是否有排序動作

count = count + 1   '記錄排序次數,可刪除

lastindex = iinner  '記錄最後排序位置

end if

next iinner

if issort = true then exit for   '如果沒有排序動作則為全部排序完成,跳出迴圈,排序結束

sorted = lastindex   '接下來的迴圈只到最後排序位置

next iouter

end select

sheets(1).range("i1") = count 

bubblesort = snarray

end function

二維陣列實現氣泡排序

實現了一維陣列的排序,同時二位陣列也可實現排序。利用c 實現,以下為主函式 includeusing namespace std define n 3 void paixu int p n void out int p n int main 形參為指向一維陣列的指標,將二維陣列存到一維陣列之中,將一...

VBA陣列賦值(2 2) 二維陣列

借助工作表為二維陣列賦值就非常簡單直接了,示例 如下。sub demo4 dim myarray myarray range a1 c3 stop endsub 如願以償的生成了3x3的二維陣列。如果陣列中的資料是在 中生成的,也不是必須要借助工作表單元格,才能實現為二維資料賦值,很多時候從 執行效...

二維陣列排序

一維陣列排序可以使用asort 公升序 ksort 降序 二維陣列排序可以使用array mutisort和usort進行排序 users array array id 1,age 12 array id 2,age 13 array id 3,age 44 array id 4,age 22 ar...