MergeSort Example Initial Commit
This commit is contained in:
parent
a7eaa4cfc6
commit
ad83fc3aff
60
jsort.cpp
Normal file
60
jsort.cpp
Normal file
@ -0,0 +1,60 @@
|
||||
#include "jade.h"
|
||||
|
||||
|
||||
FUNCTION STRARRAY merge (STRARRAY str1, STRARRAY str2) BEGIN
|
||||
DIM STRARRAY result;
|
||||
DIM AS INTEGER leftIndex=0, rightIndex=0;
|
||||
|
||||
WHILE ( (leftIndex < LEN(str1)) AND (rightIndex < LEN(str2)) ) DO
|
||||
IF (str1[leftIndex] <= str2[rightIndex]) THEN
|
||||
result.push_back(str1[leftIndex]);
|
||||
++leftIndex;
|
||||
ELSE
|
||||
result.push_back(str2[rightIndex]);
|
||||
++rightIndex;
|
||||
ENDIF
|
||||
WEND
|
||||
|
||||
IF (leftIndex < LEN(str1)) THEN
|
||||
result.push_back(str1[leftIndex]);
|
||||
ENDIF
|
||||
|
||||
IF (rightIndex < LEN(str2)) THEN
|
||||
result.push_back(str2[rightIndex]);
|
||||
ENDIF
|
||||
|
||||
RETURN result;
|
||||
ENDFUNCTION
|
||||
|
||||
|
||||
FUNCTION STRARRAY merge_sort(STRARRAY m) DO
|
||||
DIM INTEGER middle;
|
||||
|
||||
IF (LEN(m) <= 1) RETURN m;
|
||||
|
||||
middle = LEN(m) / 2;
|
||||
|
||||
DIM STRARRAY left(m.begin(), m.begin() + middle);
|
||||
DIM STRARRAY right(m.begin() + middle, m.end());
|
||||
|
||||
left = merge_sort(left);
|
||||
right = merge_sort(right);
|
||||
RETURN merge(left, right);
|
||||
ENDFUNCTION
|
||||
|
||||
MAIN
|
||||
DIM AS CSTRING Bible;
|
||||
DIM AS STRARRAY Array, Result;
|
||||
DIM AS INTEGER CNT;
|
||||
|
||||
// Bible = LOADFILE$("bible.txt");
|
||||
// Array = SPLIT(Bible,"\n");
|
||||
Array = SPLIT("pear,cranberry,orange,apple,carrot,banana,grape,peaches,tangerines",",");
|
||||
Result = merge_sort(Array);
|
||||
FOR (CNT = 0 TO CNT < LEN(Result) STEP ++CNT) DO
|
||||
PRINT (Result[CNT]);
|
||||
NEXT
|
||||
|
||||
std::cout << Result.size() << std::endl;
|
||||
ENDMAIN
|
||||
|
Loading…
Reference in New Issue
Block a user