| 1489 | } |
| 1490 | |
| 1491 | int64_t bsgs_partition(struct bsgs_xvalue *arr, int64_t n) { |
| 1492 | struct bsgs_xvalue pivot; |
| 1493 | int64_t r,left,right; |
| 1494 | r = n/2; |
| 1495 | pivot = arr[r]; |
| 1496 | left = 0; |
| 1497 | right = n-1; |
| 1498 | do { |
| 1499 | while(left < right && memcmp(arr[left].value,pivot.value,BSGS_XVALUE_RAM) <= 0 ) { |
| 1500 | left++; |
| 1501 | } |
| 1502 | while(right >= left && memcmp(arr[right].value,pivot.value,BSGS_XVALUE_RAM) > 0) { |
| 1503 | right--; |
| 1504 | } |
| 1505 | if(left < right) { |
| 1506 | if(left == r || right == r) { |
| 1507 | if(left == r) { |
| 1508 | r = right; |
| 1509 | } |
| 1510 | if(right == r) { |
| 1511 | r = left; |
| 1512 | } |
| 1513 | } |
| 1514 | bsgs_swap(&arr[right],&arr[left]); |
| 1515 | } |
| 1516 | }while(left < right); |
| 1517 | if(right != r) { |
| 1518 | bsgs_swap(&arr[right],&arr[r]); |
| 1519 | } |
| 1520 | return right; |
| 1521 | } |
| 1522 | |
| 1523 | void bsgs_heapify(struct bsgs_xvalue *arr, int64_t n, int64_t i) { |
| 1524 | int64_t largest = i; |
no test coverage detected