{"version":3,"sources":["jsdelivr-header.js","/npm/node-sort-merge@1.0.3/node-sort-merge.js"],"names":[],"mappings":"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","file":"/npm/node-sort-merge@1.0.3/node-sort-merge.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/node-sort-merge@1.0.3/node-sort-merge.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\r\n * Merge sort algorithm ! \r\n * Class\tSorting algorithm\r\n * Data structure\tArray\r\n * Worst-case performance\tO(n log n) \r\n * Best-case performance\tO(n log n) typical, O(n) natural variant\r\n * Average performance\tO(n log n) \r\n * Worst-case space complexity О(n) total, O(n) auxiliary\r\n *   where n is the size of the input array.\r\n *   input array elements could be negative/positive and also integer or float .\r\n *   Note: there are another kind of Merg sort by the name of 3-way Merge Sort . \r\n *         Merge sort involves recursively splitting the array into 2 parts, sorting and finally merging them. \r\n *         A variant of merge sort is called 3-way merge sort where instead of splitting the array into 2 parts \r\n *         we split it into 3 parts.\r\n *         Merge sort recursively breaks down the arrays to subarrays of size half. Similarly, \r\n *         3-way Merge sort breaks down the arrays to subarrays of size one third.\r\n *\r\n * Author: Pooya Hatami\r\n */\r\n \r\nmodule.exports = function(inputArray,displayStatus,callback) {\r\n  displaymode = displayStatus;\r\n  try {\r\n    var code = maxsqrt(inputArray);   // code[0] : max element Code[1] : bucket size square of lenght // code[2] array lenght // code[3] min element \r\n    if (displaymode==\"Yes\") console.log(\"max\",code[0],\"lenght square\",code[1],\"array lenght\",code[2],\"min\",code[3]);\r\n    if (!inputArray || inputArray.length === undefined) {\r\n        throw new Error(\"Input array is not valid !\");\r\n    // } else if (code[3] < 0 ) {\r\n    //     throw new Error(\"negative element not accepted ! \");\r\n    } else \r\n       callback(null, {\r\n            bucketSort: function () {\r\n              if (code[3] < 0 ) throw new Error(\"Negative element are not accepted ! for Bucket Sort.\");\r\n              if (displaymode==\"Yes\") console.log(\"Sorting Array\",inputArray,\"with bucketSort\");\r\n        \t\t  if (code[0]<=0) return bsfractions(inputArray,10,code[2]);\r\n              else return bs(inputArray,code);\r\n\t\t\t},\r\n            mergeSort: function () {\r\n            if (displaymode==\"Yes\") console.log(\"Sorting Array\",inputArray,\"with mergeSort\");\r\n        \t\t  return ms(inputArray,0,code[2]-1);\r\n\t\t\t},\r\n            binSort:function () {\r\n              if (displaymode==\"Yes\") console.log(\"Sorting Array\",inputArray,\"with bucketSort which is the same as binSort!\");\r\n        \t\t  return bs(inputArray,code);\r\n\t\t\t}\r\n    });\r\n  }\r\n  catch (error) {\r\n        callback(error,null);\r\n  }\r\n}\r\n\r\n\r\n// exports.bucketSort = function(inputArray) {\r\n//   if(!inputArray) return -1;\r\n//   if(inputArray.length === undefined) return -1;\r\n\r\n//   var code = maxsqrt(inputArray);   // code[0] : max element Code[1] :bucket Size Code[2] : Array length\r\n//   if (code[0]<=0) return bsfractions(inputArray,10,code[2]);\r\n//   else return bs(inputArray,code);\r\n// }\r\n\r\nvar displaymode = \"No\"; // by defualt No details display \r\n\r\n// Merges two subarrays of arr[].\r\n// First subarray is arr[l..m]\r\n// Second subarray is arr[m+1..r]\r\nmerge = function(arr,l,m,r)\r\n{\r\n    var i, j, k;\r\n    var n1 = m - l + 1;\r\n    var n2 =  r - m;\r\n \r\n    /* create temp arrays */\r\n    var L = new Array(n1);\r\n    var R = new Array(n2);\r\n \r\n    /* Copy data to temp arrays L[] and r[] */\r\n    for (i = 0; i < n1; i++)\r\n        L[i] = arr[l + i];\r\n    for (j = 0; j < n2; j++)\r\n        R[j] = arr[m + 1+ j];\r\n \r\n    /* Merge the temp arrays back into arr[l..r]*/\r\n    i = 0; // Initial index of first subarray\r\n    j = 0; // Initial index of second subarray\r\n    k = l; // Initial index of merged subarray\r\n    while (i < n1 && j < n2)\r\n    {\r\n        if (L[i] <= R[j])\r\n        {\r\n            arr[k] = L[i];\r\n            i++;\r\n        }\r\n        else\r\n        {\r\n            arr[k] = R[j];\r\n            j++;\r\n        }\r\n        k++;\r\n    }\r\n \r\n    /* Copy the remaining elements of L[], if there\r\n       are any */\r\n    while (i < n1)\r\n    {\r\n        arr[k] = L[i];\r\n        i++;\r\n        k++;\r\n    }\r\n \r\n    /* Copy the remaining elements of R[], if there\r\n       are any */\r\n    while (j < n2)\r\n    {\r\n        arr[k] = R[j];\r\n        j++;\r\n        k++;\r\n    }\r\n\r\n  return arr;\r\n}\r\n \r\n/* l is for left index and r is right index of the\r\n   sub-array of arr to be sorted */\r\nms = function(arr,l,r)\r\n{\r\n    if (l < r)\r\n    {\r\n        // Same as (l+r)/2, but avoids overflow for\r\n        // large l and h\r\n        var m = Math.floor(l+(r-l)/2);\r\n        if (displaymode == \"Yes\") console.log(\"mid of \",l,\"and\",r,\"is\",m);\r\n        // Sort first and second halves\r\n        ms(arr, l, m);\r\n        ms(arr, m+1, r);\r\n \r\n        merge(arr, l, m, r);\r\n    }\r\n    return arr;\r\n}\r\n \r\n/* UTILITY FUNCTIONS */\r\n/* Function to print an array */\r\nprintArray = function(a,size)\r\n{\r\n    var i;\r\n    for (i=0; i < size; i++)\r\n        console.log(a[i]);\r\n    console.log(\"\\n\");\r\n}\r\n \r\n\r\n// Function to sort input[] of size n using bucket sort\r\n// for positive float numbers  \r\nbs = function(input,code)\r\n{\r\n    // 1) Create n empty buckets\r\n    //vector<float> b[n];\r\n    var maxelement = code[0];\r\n    var ibucket = code[1];\r\n    var arrlen  = code[2];\r\n    if (displaymode == \"Yes\") console.log(input,ibucket,arrlen,code);\r\n    var b = new Array(ibucket);\r\n    for (i=0; i<ibucket; i++)\r\n         b[i]= new Array();\r\n    if (displaymode == \"Yes\") console.log(\"empty buckets \",b);\r\n    // 2) Put array elements in different buckets\r\n    for (i=0; i<arrlen; i++)\r\n    {\r\n       var bi = indexmaker(input[i],code); // Index in bucket\r\n       if (displaymode == \"Yes\") console.log(input[i],\" in bucket \"+bi);\r\n       b[bi].push(input[i]);\r\n    }\r\n    \r\n    if (displaymode == \"Yes\") console.log(\"full buckets befor sort :\\n\",b);\r\n    // 3) Sort individual buckets\r\n    for (i=0; i<ibucket; i++) {\r\n         if (displaymode == \"Yes\") console.log(\"bucket \"+ i +\" befor sort : \"+b[i]);\r\n         //b[i].sort(sortNumber);\r\n         b[i] = is(b[i]);   // sorting each bucket with insertionSort \r\n         if (displaymode == \"Yes\") console.log(\"after sort : \"+b[i]);\r\n    }\r\n    if (displaymode == \"Yes\") console.log(\"\\nfull buckets after sort :\\n\", b);\r\n\r\n    // 4) Concatenate all buckets into input[]\r\n    var index = 0;\r\n    for (i = 0; i < ibucket; i++)\r\n        for (j = 0; j < b[i].length; j++)\r\n          input[index++] = b[i][j];\r\n\r\n  return input;\r\n  \r\n}\r\n\r\n// Function to : \r\n//   find bigest element\r\n//   creat bucket size\r\n//   find Array lenght           \r\nmaxsqrt = function(input)\r\n{\r\n  var output = new Array(2);\r\n  var arrlen = input.length;\r\n  var max = input[0];\r\n  var min = input[0];\r\n  for (i = 1; i < input.length; i++) {\r\n    if (max < input[i]) {\r\n      max = input[i];\r\n    }\r\n    if (min > input[i]) {\r\n      min = input[i];\r\n    }\r\n  }\r\n  output[0] = Math.floor(max);\r\n  output[1] = Math.floor(Math.sqrt(input.length));\r\n  output[2] = arrlen;\r\n  output[3] = Math.floor(min);\r\n  return output;\r\n}\r\n\r\n// Function to make bucket index \r\nindexmaker = function(oneinputcell,code)\r\n{\r\n  var output = Math.floor(oneinputcell / code[0] * (code[1] - 1))\r\n  return output;\r\n}\r\n\r\nsortNumber = function(a,b)\r\n{\r\n    return a - b;\r\n}\r\n\r\n// Function to sort input[] of size n using bucket sort \r\n// for float numbers between 0 to 1\r\nbsfractions = function(input,ibucket,arrlen)\r\n{\r\n   if (displaymode == \"Yes\") console.log(input,ibucket,arrlen);\r\n    // 1) Create n empty buckets\r\n    //vector<float> b[n];\r\n    var b = new Array(ibucket);\r\n    for (i=0; i<ibucket; i++)\r\n         b[i]= new Array();\r\n    if (displaymode == \"Yes\") console.log(\"empty fractions buckets \",b);\r\n    // 2) Put array elements in different buckets\r\n    for (i=0; i<arrlen; i++)\r\n    {\r\n       var bi = Math.floor(ibucket*input[i]); // Index in bucket\r\n       if (displaymode == \"Yes\") console.log(input[i],\" in bucket \"+bi);\r\n       b[bi].push(input[i]);\r\n    }\r\n    \r\n    if (displaymode == \"Yes\") console.log(\"full buckets befor sort :\\n\", b);\r\n    // 3) Sort individual buckets\r\n    for (i=0; i<ibucket; i++) {\r\n         if (displaymode == \"Yes\") console.log(\"bucket \"+ i +\" befor sort : \"+b[i]);\r\n         b[i].sort();\r\n         if (displaymode == \"Yes\") console.log(\"bucket \"+ i +\" after sort : \"+b[i]);\r\n    }\r\n    if (displaymode == \"Yes\") console.log(\"\\nfull buckets after sort :\\n\", b);\r\n \r\n \r\n    // 4) Concatenate all buckets into input[]\r\n    var index = 0;\r\n    for (i = 0; i < ibucket; i++)\r\n        for (j = 0; j < b[i].length; j++)\r\n          input[index++] = b[i][j];\r\n\r\n  return input;\r\n  \r\n}\r\n\r\n// Function to sort input[] of size n using bucket sort \r\n// for numbers positive or negative\r\nis = function(input) {\r\n\r\n        var n = input.length;\r\n        for (i=1; i<n; ++i)\r\n        {\r\n            var key = input[i];\r\n            var j = i-1;\r\n \r\n            // Move elements of input[0..i-1], that are\r\n            //   greater than key, to one position ahead\r\n            //   of their current position \r\n            while (j>=0 && input[j] > key)\r\n            {\r\n                input[j+1] = input[j];\r\n                j = j-1;\r\n            }\r\n            input[j+1] = key;\r\n        }\r\n\r\n      return input;\r\n   };\r\n"]}