mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-01 04:10:07 +00:00
.. half closed range; ... open range; ... variadic syntax
This commit is contained in:
+18
-18
@@ -7,7 +7,7 @@ bubble_sort :: proc(array: []$T, f: proc(T, T) -> int) {
|
||||
for {
|
||||
init_swap, prev_swap := -1, -1;
|
||||
|
||||
for j in init_j..<last_j {
|
||||
for j in init_j..last_j {
|
||||
if f(array[j], array[j+1]) > 0 {
|
||||
array[j], array[j+1] = array[j+1], array[j];
|
||||
prev_swap = j;
|
||||
@@ -30,7 +30,7 @@ bubble_sort :: proc(array: []$T) {
|
||||
for {
|
||||
init_swap, prev_swap := -1, -1;
|
||||
|
||||
for j in init_j..<last_j {
|
||||
for j in init_j..last_j {
|
||||
if array[j] > array[j+1] {
|
||||
array[j], array[j+1] = array[j+1], array[j];
|
||||
prev_swap = j;
|
||||
@@ -65,8 +65,8 @@ quick_sort :: proc(array: []$T, f: proc(T, T) -> int) {
|
||||
j -= 1;
|
||||
}
|
||||
|
||||
quick_sort(a[0..<i], f);
|
||||
quick_sort(a[i..<n], f);
|
||||
quick_sort(a[0..i], f);
|
||||
quick_sort(a[i..n], f);
|
||||
}
|
||||
|
||||
quick_sort :: proc(array: []$T) {
|
||||
@@ -88,8 +88,8 @@ quick_sort :: proc(array: []$T) {
|
||||
j -= 1;
|
||||
}
|
||||
|
||||
quick_sort(a[0..<i]);
|
||||
quick_sort(a[i..<n]);
|
||||
quick_sort(a[0..i]);
|
||||
quick_sort(a[i..n]);
|
||||
}
|
||||
|
||||
_log2 :: proc(n: int) -> int {
|
||||
@@ -102,7 +102,7 @@ merge_sort :: proc(array: []$T, f: proc(T, T) -> int) {
|
||||
merge_slices :: proc(arr1, arr2, out: []$T, f: proc(T, T) -> int) {
|
||||
N1, N2 := len(arr1), len(arr2);
|
||||
i, j := 0, 0;
|
||||
for k in 0..<N1+N2 {
|
||||
for k in 0..N1+N2 {
|
||||
if j == N2 || i < N1 && j < N2 && f(arr1[i], arr2[j]) < 0 {
|
||||
out[k] = arr1[i]; i++;
|
||||
} else {
|
||||
@@ -120,16 +120,16 @@ merge_sort :: proc(array: []$T, f: proc(T, T) -> int) {
|
||||
|
||||
a, b, m, M := N/2, N, 1, _log2(N);
|
||||
|
||||
for i in 0..<M+1 {
|
||||
for j in 0..<a {
|
||||
for i in 0..M+1 {
|
||||
for j in 0..a {
|
||||
k := 2*j*m;
|
||||
merge_slices(arr1[k..<k+m], arr1[k+m..<k+m+m], arr2[k..], f);
|
||||
merge_slices(arr1[k..k+m], arr1[k+m..k+m+m], arr2[k..], f);
|
||||
}
|
||||
if N-b > m {
|
||||
k := 2*a*m;
|
||||
merge_slices(arr1[k..<k+m], arr1[k+m..<k+m+(N-b)&(m-1)], arr2[k..], f);
|
||||
merge_slices(arr1[k..k+m], arr1[k+m..k+m+(N-b)&(m-1)], arr2[k..], f);
|
||||
} else {
|
||||
copy(arr2[b..N-1], arr1[b..N-1]);
|
||||
copy(arr2[b..N], arr1[b..N]);
|
||||
}
|
||||
arr1, arr2 = arr2, arr1;
|
||||
m <<= 1;
|
||||
@@ -144,7 +144,7 @@ merge_sort :: proc(array: []$T) {
|
||||
merge_slices :: proc(arr1, arr2, out: []$T) {
|
||||
N1, N2 := len(arr1), len(arr2);
|
||||
i, j := 0, 0;
|
||||
for k in 0..<N1+N2 {
|
||||
for k in 0..N1+N2 {
|
||||
if j == N2 || i < N1 && j < N2 && arr1[i] < arr2[j] {
|
||||
out[k] = arr1[i]; i++;
|
||||
} else {
|
||||
@@ -160,16 +160,16 @@ merge_sort :: proc(array: []$T) {
|
||||
|
||||
a, b, m, M := N/2, N, 1, _log2(N);
|
||||
|
||||
for i in 0..<M+1 {
|
||||
for j in 0..<a {
|
||||
for i in 0..M+1 {
|
||||
for j in 0..a {
|
||||
k := 2*j*m;
|
||||
merge_slices(arr1[k..<k+m], arr1[k+m..<k+m+m], arr2[k..]);
|
||||
merge_slices(arr1[k..k+m], arr1[k+m..k+m+m], arr2[k..]);
|
||||
}
|
||||
if N-b > m {
|
||||
k := 2*a*m;
|
||||
merge_slices(arr1[k..<k+m], arr1[k+m..<k+m+(N-b)&(m-1)], arr2[k..]);
|
||||
merge_slices(arr1[k..k+m], arr1[k+m..k+m+(N-b)&(m-1)], arr2[k..]);
|
||||
} else {
|
||||
copy(arr2[b..N-1], arr1[b..N-1]);
|
||||
copy(arr2[b..N], arr1[b..N]);
|
||||
}
|
||||
arr1, arr2 = arr2, arr1;
|
||||
m <<= 1;
|
||||
|
||||
Reference in New Issue
Block a user