Data update
This commit is contained in:
parent
35bcdeebf8
commit
74c69a0df6
2427 changed files with 31826 additions and 3468 deletions
20
Task/Binary-search/Zig/binary-search-1.zig
Normal file
20
Task/Binary-search/Zig/binary-search-1.zig
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
pub fn binarySearch(comptime T: type, input: []const T, search_value: T) ?usize {
|
||||
if (input.len == 0) return null;
|
||||
if (@sizeOf(T) == 0) return 0;
|
||||
|
||||
var view: []const T = input;
|
||||
const item_ptr: *const T = item_ptr: while (view.len > 0) {
|
||||
const mid = (view.len - 1) / 2;
|
||||
const mid_elem_ptr: *const T = &view[mid];
|
||||
|
||||
if (mid_elem_ptr.* > search_value)
|
||||
view = view[0..mid]
|
||||
else if (mid_elem_ptr.* < search_value)
|
||||
view = view[mid + 1 .. view.len]
|
||||
else
|
||||
break :item_ptr mid_elem_ptr;
|
||||
} else return null;
|
||||
|
||||
const distance_in_bytes = @intFromPtr(item_ptr) - @intFromPtr(input.ptr);
|
||||
return (distance_in_bytes / @sizeOf(T));
|
||||
}
|
||||
18
Task/Binary-search/Zig/binary-search-2.zig
Normal file
18
Task/Binary-search/Zig/binary-search-2.zig
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
pub fn binarySearch(comptime T: type, input: []const T, search_value: T) ?usize {
|
||||
return binarySearchInner(T, input, search_value, @intFromPtr(input.ptr));
|
||||
}
|
||||
|
||||
fn binarySearchInner(comptime T: type, input: []const T, search_value: T, start_address: usize) ?usize {
|
||||
if (input.len == 0) return null;
|
||||
if (@sizeOf(T) == 0) return 0;
|
||||
|
||||
const mid = (input.len - 1) / 2;
|
||||
const mid_elem_ptr: *const T = &input[mid];
|
||||
|
||||
return if (mid_elem_ptr.* > search_value)
|
||||
binarySearchInner(T, input[0..mid], search_value, start_address)
|
||||
else if (mid_elem_ptr.* < search_value)
|
||||
binarySearchInner(T, input[mid + 1 .. input.len], search_value, start_address)
|
||||
else
|
||||
(@intFromPtr(mid_elem_ptr) - start_address) / @sizeOf(T);
|
||||
}
|
||||
19
Task/Binary-search/Zig/binary-search-3.zig
Normal file
19
Task/Binary-search/Zig/binary-search-3.zig
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
const math = @import("std").math;
|
||||
|
||||
pub fn binarySearch(comptime T: type, input: []const T, search_value: T) ?usize {
|
||||
if (input.len == 0) return null;
|
||||
if (@sizeOf(T) == 0) return 0;
|
||||
|
||||
var low: usize = 0;
|
||||
var high: usize = input.len - 1;
|
||||
return while (low <= high) {
|
||||
const mid = ((high - low) / 2) + low;
|
||||
const mid_elem: T = input[mid];
|
||||
if (mid_elem > search_value)
|
||||
high = math.sub(usize, mid, 1) catch break null
|
||||
else if (mid_elem < search_value)
|
||||
low = mid + 1
|
||||
else
|
||||
break mid;
|
||||
} else null;
|
||||
}
|
||||
22
Task/Binary-search/Zig/binary-search-4.zig
Normal file
22
Task/Binary-search/Zig/binary-search-4.zig
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
const math = @import("std").math;
|
||||
|
||||
pub fn binarySearch(comptime T: type, input: []const T, search_value: T) ?usize {
|
||||
if (input.len == 0) return null;
|
||||
if (@sizeOf(T) == 0) return 0;
|
||||
|
||||
return binarySearchInner(T, input, search_value, 0, input.len - 1);
|
||||
}
|
||||
|
||||
fn binarySearchInner(comptime T: type, input: []const T, search_value: T, low: usize, high: usize) ?usize {
|
||||
if (low > high) return null;
|
||||
|
||||
const mid = ((high - low) / 2) + low;
|
||||
const mid_elem: T = input[mid];
|
||||
|
||||
return if (mid_elem > search_value)
|
||||
binarySearchInner(T, input, search_value, low, math.sub(usize, mid, 1) catch return null)
|
||||
else if (mid_elem < search_value)
|
||||
binarySearchInner(T, input, search_value, mid + 1, high)
|
||||
else
|
||||
mid;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue