rcmaehl Posted December 1, 2015 Posted December 1, 2015 (edited) Got Bored, and decided to write up BubbleSort from my early Prelude to Programming class in College. Features: BubbleSorting! Fast on small arrays, extremely slow on larger ones! 2 Dimesional Array Sorting (KINDA)! Sort 2 dimesional arrays! 83 Lines of Code you'll never use because _ArraySort is hundreds faster! expandcollapse popup#include-once #include <AutoItConstants.au3> ; #FUNCTION# ==================================================================================================================== ; Name ..........: BubbleSort ; Description ...: Sorts a 1 or 2 dimensional array using the BubbleSort Algorithm ; Syntax ........: BubbleSort($_aArray[, $_bAscending = True]) ; Parameters ....: $_aArray - [in/out] The 1 dimensional array to sort. ; $_bAscending - [optional] Sort by increasing values. Default is True. ; Return values .: Success - Returns 1 ; Failure - Returns 0 and sets @error: ; |1 = Invalid Array, sets @extented: (1, if not a valid array; 2, if not 1 or 2 dimesional) ; |2 = Invalid $_bAscending Flag ; Author ........: Robert C. Maehl (rcmaehl) ; Modified ......: 11/30/2015 ; Remarks .......: To do: Complete Two Dimesional Array sorting ([first,first] = lowest, [last,last] = highest) ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func BubbleSort(ByRef $_aArray, $_bAscending = True) Local $_vReturn = Null Local $_bFinished = False If Not IsArray($_aArray) Then SetError(1,1,0) If UBound($_aArray, $UBOUND_DIMENSIONS) > 2 Then SetError(1,2,0) If Not IsBool($_bAscending) Then SetError(2,0,0) If $_vReturn = Null Then If UBound($_aArray, $UBOUND_DIMENSIONS) = 1 Then While Not $_bFinished $_bFinished = True $_iLoop = 0 $_vTemp = 0 If $_bAscending Then For $_iLoop = 0 To UBound($_aArray) - 2 If $_aArray[$_iLoop] > $_aArray[$_iLoop + 1] Then $_vTemp = $_aArray[$_iLoop] $_aArray[$_iLoop] = $_aArray[$_iLoop + 1] $_aArray[$_iLoop + 1] = $_vTemp $_bFinished = False EndIf Next Else For $_iLoop = 0 To UBound($_aArray) - 2 If $_aArray[$_iLoop] < $_aArray[$_iLoop + 1] Then $_vTemp = $_aArray[$_iLoop] $_aArray[$_iLoop] = $_aArray[$_iLoop + 1] $_aArray[$_iLoop + 1] = $_vTemp $_bFinished = False EndIf Next EndIf WEnd Else ; 2 Dimesional Sorting, Not Yet Complete. (Sort all rows & columns with [0,0] with smallest, and [last,last] with largest) $_iLoop1 = 0 For $_iLoop1 = 0 To UBound($_aArray, $UBOUND_ROWS) - 1 $_bFinished = False While Not $_bFinished $_bFinished = True $_iLoop2 = 0 $_vTemp = 0 If $_bAscending Then For $_iLoop2 = 0 To UBound($_aArray, $UBOUND_COLUMNS) - 2 If $_aArray[$_iLoop1][$_iLoop2] > $_aArray[$_iLoop1][$_iLoop2 + 1] Then $_vTemp = $_aArray[$_iLoop1][$_iLoop2] $_aArray[$_iLoop1][$_iLoop2] = $_aArray[$_iLoop1][$_iLoop2 + 1] $_aArray[$_iLoop1][$_iLoop2 + 1] = $_vTemp $_bFinished = False EndIf Next Else For $_iLoop2 = 0 To UBound($_aArray, $UBOUND_COLUMNS) - 2 If $_aArray[$_iLoop1][$_iLoop2] < $_aArray[$_iLoop1][$_iLoop2 + 1] Then $_vTemp = $_aArray[$_iLoop1][$_iLoop2] $_aArray[$_iLoop1][$_iLoop2] = $_aArray[$_iLoop1][$_iLoop2 + 1] $_aArray[$_iLoop1][$_iLoop2 + 1] = $_vTemp $_bFinished = False EndIf Next EndIf WEnd Next EndIf EndIf EndFunc Edited January 22, 2018 by rcmaehl Fix #include mLipok 1 My UDFs are generally for me. If they aren't updated for a while, it means I'm not using them myself. As soon as I start using them again, they'll get updated.My Projects WhyNotWin11Cisco Finesse, Github, IRC UDF, WindowEx UDF
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now