Skip to content

Commit beec3b6

Browse files
erikastampkostis
andauthored
[Dana] Add a binary search program (#64)
* Add a binary search program * Address feedback from PR review --------- Co-authored-by: Kostis Sagonas <kostis@cs.ntua.gr>
1 parent b8a036a commit beec3b6

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

dana/programs/binarysearch.dana

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
def main
2+
3+
def partition: arr as int [], low high as int
4+
var pivot i j is int
5+
pivot := arr[high]
6+
i := low - 1
7+
j := low
8+
loop:
9+
if j > high: break
10+
if arr[j] < pivot:
11+
i := i + 1
12+
swap: arr[i], arr[j]
13+
j := j + 1
14+
swap: arr[i+1] arr[high]
15+
return: (i+1)
16+
17+
def quicksort: arr as int [], low high as int
18+
var pi is int
19+
if low < high:
20+
pi := (partition: arr, low, high)
21+
quicksort: arr, low, (pi - 1)
22+
quicksort: arr, (pi + 1), high
23+
24+
def swap: a as ref int, b as ref int
25+
var t is int
26+
t := a
27+
a := b
28+
b := t
29+
30+
def binarySearch: arr as int [], low high x as int
31+
var mid is int
32+
loop:
33+
if low > high: break
34+
mid := low + (high - low)/2
35+
if arr[mid] = x:
36+
return: mid
37+
if arr[mid] < x:
38+
low := mid + 1
39+
else:
40+
high := mid - 1
41+
return: -1
42+
43+
var nums is int []
44+
var size k find is int
45+
k := 0
46+
writeString: "Give size of array: "
47+
size := readInteger()
48+
writeString: "\n"
49+
writeString: "Give the numbers of the array: "
50+
loop:
51+
if k <= size:
52+
nums[k] := readInteger()
53+
k = k + 1
54+
else:
55+
nums[k] := '\0'
56+
break
57+
58+
writeString: "\n"
59+
quicksort: nums, 0, (size - 1)
60+
writeString: "Array is now sorted\n"
61+
writeString: "Which value should I search for? "
62+
find := readInteger()
63+
writeString: "\n"
64+
writeString: "Value is: "
65+
writeInteger: (binarySearch: nums, 0, (size - 1), find)

dana/programs/binarysearch.input

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
5
2+
2 3 4 10 40
3+
10

dana/programs/binarysearch.result

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Value is: 3

0 commit comments

Comments
 (0)