在使用VBA进行写程序时,经常会做排序,下面将会给出一些常用的排序算法的实现,方便大家写程序参考,若代码中出现了错误,欢迎高手指正。主要算法有:1、(冒泡排序)Bubblesort2、(选择排序)Selectionsort3、(插入排序)Insertionsort4、(快速排序)Quicksort5、(合并排序)Mergesort6、(堆排序)Heapsort7、(bSort8、(希尔排序)ShellSort9、(基数排序)RadixSort10、ShakerSort第一种(冒泡排序)BubblesortPublicSubBubbleSort(ByReflngArray()AsLong)DimiOuterAsLongDimiInnerAsLongDimiLBoundAsLongDimiUBoundAsLongDimiTempAsLongiLBound=LBound(lngArray)iUBound=UBound(lngArray)'冒泡排序ForiOuter=iLBoundToiUBound-1ForiInner=iLBoundToiUBound-iOuter-1'比较相邻项IflngArray(iInner)>lngArray(iInner+1)Then'交换值iTemp=lngArray(iInner)lngArray(iInner)=lngArray(iInner+1)lngArray(iInner+1)=iTempEndIfNextiInnerNextiOuterEndSub2、(选择排序)SelectionsortPublicSubSelectionSort(ByReflngArray()AsLong)DimiOuterAsLongDimiInnerAsLongDimiLBoundAsLongDimiUBoundAsLongDimiTempAsLongDimiMaxAsLongiLBound=LBound(lngArray)iUBound=UBound(lngArray)'选择排序ForiOuter=iUBoundToiLBound+1Step-1iMax=0'得到最大值得索引ForiInner=iLBoundToiOuterIflngArray(iInner)>lngArray(iMax)TheniMax=iInnerNextiInner'值交换iTemp=lngArray(iMax)lngArray(iMax)=lngArray(iOuter)lngArray(iOuter)=iTempNextiOuterEndSub复制代码第三种(插入排序)InsertionsortPublicSubInsertionSort(ByReflngArray()AsLong)DimiOuterAsLongDimiInnerAsLongDimiLBoundAsLongDimiUBoundAsLongDimiTempAsLongiLBound=LBound(lngArray)iUBound=UBound(lngArray)ForiOuter=iLBound+1ToiUBound'取得插入值iTemp=lngArray(iOuter)'移动已经排序的值ForiInner=iOuter-1ToiLBoundStep-1IflngArray(iInner)<=iTempThenExitForlngArray(iInner+1)=lngArray(iInner)NextiInner'插入值lngArray(iInner+1)=iTempNextiOuterEndSub复制代码第四种(快速排序)QuicksortPublicSubQuickSort(ByReflngArray()AsLong)DimiLBoundAsLongDimiUBoundAsLongDimiTempAsLongDimiOuterAsLongDimiMaxAsLongiLBound=LBound(lngArray)iUBound=UBound(lngArray)'若只有一个值,不排序If(iUBound-iLBound)ThenForiOuter=iLBoundToiUBoundIflngArray(iOuter)>lngArray(iMax)TheniMax=iOuterNextiOuteriTemp=lngArray(iMax)lngArray(iMax)=lngArray(iUBound)lngArray(iUBound)=iTemp'开始快速排序InnerQuickSortlngArray,iLBound,iUBoundEndIfEndSubPrivateSubInnerQuickSort(ByReflngArray()AsLong,ByValiLeftEndAsL
VBA排序的十种算法 来自淘豆网m.daumloan.com转载请标明出处.