| 3689 | } |
| 3690 | |
| 3691 | int64_t bsgs_partition(struct bsgs_xvalue *arr, int64_t n) { |
| 3692 | struct bsgs_xvalue pivot; |
| 3693 | int64_t r,left,right; |
| 3694 | r = n/2; |
| 3695 | pivot = arr[r]; |
| 3696 | left = 0; |
| 3697 | right = n-1; |
| 3698 | do { |
| 3699 | while(left < right && memcmp(arr[left].value,pivot.value,BSGS_XVALUE_RAM) <= 0 ) { |
| 3700 | left++; |
| 3701 | } |
| 3702 | while(right >= left && memcmp(arr[right].value,pivot.value,BSGS_XVALUE_RAM) > 0) { |
| 3703 | right--; |
| 3704 | } |
| 3705 | if(left < right) { |
| 3706 | if(left == r || right == r) { |
| 3707 | if(left == r) { |
| 3708 | r = right; |
| 3709 | } |
| 3710 | if(right == r) { |
| 3711 | r = left; |
| 3712 | } |
| 3713 | } |
| 3714 | bsgs_swap(&arr[right],&arr[left]); |
| 3715 | } |
| 3716 | }while(left < right); |
| 3717 | if(right != r) { |
| 3718 | bsgs_swap(&arr[right],&arr[r]); |
| 3719 | } |
| 3720 | return right; |
| 3721 | } |
| 3722 | |
| 3723 | void bsgs_heapify(struct bsgs_xvalue *arr, int64_t n, int64_t i) { |
| 3724 | int64_t largest = i; |
no test coverage detected