Data Structures and Algorithms
Download
Report
Transcript Data Structures and Algorithms
Week # 2: Arrays
Data structure
A particular way of storing and organising data in a computer so
that it can be used efficiently
Types of data structures
Based on memory allocation
o Static (or fixed sized) data structures (Arrays)
o Dynamic data structures (Linked lists)
Based on representation
o Linear
o Non-linear
(Arrays/linked lists)
(Trees/graphs)
You want to store 5 numbers in a computer
Define 5 variables, e.g. num1, num2, ..., num5
What, if you want to store 1000 numbers?
Defining 1000 variables is a pity!
Requires much programming effort
Any
better solution?
Yes, some structured data type
o Array is one of the most common structured data types
o Saves a lot of programming effort (cf. 1000 variable names)
A collection
of data elements in which
all elements are of the same data type, hence homogeneous data
o An array of students’ marks
o An array of students’ names
o An array of objects (OOP perspective!)
elements (or their references) are stored at contiguous/
consecutive memory locations
Array
is a static data structure
An array cannot grow or shrink during program execution – its
size is fixed
Array
name (data)
Index/subscript (0...9)
The slots are numbered sequentially starting at
zero (Java, C++)
If there are N slots in an array, the index will
be 0 through N-1
Array length = N = 10
Array size = N x Size of an element = 40
Direct access to an element
All
elements in the array must have the same data type
Index:
0
Value:
5
1
2
3
4
5
6
7
8
9
10 18 30 45 50 60 65 70 80
Index:
0
1
Value:
5.5
10.2
Index:
0
1
Value:
‘A’
10.2
3
2
18.5
4
45.6
3
2
55
60.5
4
‘X’
60.5
Not an array
Array
elements are stored at contiguous memory locations
Index:
0
Value:
5
1
2
3
4
5
6
7
8
9
10 18 30 45 50 60 65 70 80
No empty segment in between values (3 & 5 are empty –
not allowed)
9
Index:
0 1 2 3 4 5 6 7 8
Value:
5
10 18
45
60 65 70 80
Declaring and Creating arrays
◦ Arrays are objects that occupy memory
◦ Created dynamically with keyword new
int c[] = new int[ 12 ];
Equivalent to
int c[]; // declare array variable
c = new int[ 12 ]; // create array
We can create arrays of objects too
String b[] = new String[ 100 ];
Array_name[index]
For example, in Java
System.out.println(data[4]) will display 0
data[3] = 99 will replace -3 with 99
Array_name[index]
For example, in Java
System.out.println(data[4]) will display 0
data[3] = 99 will replace -3 with 99
Using an array initializer
◦ Use initializer list
Items enclosed in braces ({})
Items in list separated by commas
int n[] = { 10, 20, 30, 40, 50 };
Creates a five-element array
Index values of 0, 1, 2, 3, 4
◦ Do not need keyword new
To
declare an array follow the type with (empty) []s
int[] grade; //or
int grade[]; //both declare an int array
In
Java arrays are objects so must be created with the new
keyword
To create an array of ten integers:
int[] grade = new int[10];
Note that the array size has to be specified, although it can be
specified with a variable at run-time
• Calculating the value to store in each array
element
– Initialize elements of 10-element array to even integers
InitArray.java
Line 10
Declare array as an
array of ints
Line 12
Create 10 ints for
array
Line 16
Use array index to
assign array value
Summing the elements of an array
◦ Array elements can represent a series of values
We can sum these values
Histogram.java
Line 9
Declare array with
initializer list
Line 19
For each array
element, print
associated number of
asterisks
1.
2.
data[ -1 ] always illegal
data[ 10 ] illegal (10 > upper bound)
data[ 1.5 ] always illegal
data[ 0 ] always OK
data[ 9 ] OK
Q. What will be the output of?
data[5] + 10
data[3] = data[3] + 10
One dimensional (just a linear list)
e.g.,
5
10 18 30 45 50 60 65 70 80
Only one subscript is required to access an individual element
Two dimensional (matrix/table)
e.g., 2 x 4 matrix (2 rows, 4 columns)
Row 0
Row 1
Col 0
20
30
Col 1
25
15
Col 2
60
70
Col 3
40
90
Multidimensional arrays
◦ Tables with rows and columns
Two-dimensional array
Declaring two-dimensional array b[2][2]
int b[][] = { { 1, 2 }, { 3, 4 } };
1 and 2 initialize b[0][0] and b[0][1]
3 and 4 initialize b[1][0] and b[1][1]
int b[][] = { { 1, 2 }, { 3, 4, 5 } };
row 0 contains elements 1 and 2
row 1 contains elements 3, 4 and 5
Creating multidimensional arrays
◦ Can be allocated dynamically
3-by-4 array
int b[][];
b = new int[ 3 ][ 4 ];
Rows can have different number
int b[][];
b = new int[ 2 ][ ];
//
b[ 0 ] = new int[ 5 ]; //
b[ 1 ] = new int[ 3 ]; //
of columns
allocate rows
allocate row 0
allocate row 1
Row 0
Row 1
Row 2
Column 0
Column 1
Column 2
a[ 0 ][ 0 ]
a[ 0 ][ 1 ]
a[ 0 ][ 2 ]
a[ 0 ][ 3 ]
a[ 1 ][ 0 ]
a[ 1 ][ 1 ]
a[ 1 ][ 2 ]
a[ 1 ][ 3 ]
a[ 2 ][ 0 ]
a[ 2 ][ 1 ]
a[ 2 ][ 2 ]
a[ 2 ][ 3 ]
Column index
Row index
Array name
Column 3
InitArray.jav
a
Line 16
Declare array1
with six initializers
in two sublists
Line 17
Declare array2
with six initializers
in three sublists
InitArray.java
Line 34
array[row].leng
th returns number of
columns associated
with row subscript
Line 35
Use double-bracket
notation to access twodimensional array
values
Searching
◦ Finding elements in large amounts of data
Determine whether array contains value matching key
value
◦ Linear searching
◦ Binary searching
Linear search
◦ Compare each array element with search key
If search key found, return element index
If search key not found, return –1 (invalid index)
◦ Works best for small or unsorted arrays
◦ Inefficient for larger arrays
LinearSearch.java
Line 11
Declare array of ints
LinearSearch.java
Lines 39-42
Allocate 100 ints for
array and populate
array with even ints
Line 50
Loop through array
Lines 53-54
If array element at
index matches search key,
return index
LinearSearch.java
Line 61
Invoked when user
presses Enter
Line 68
Invoke method
linearSearch, using
array and search key as
arguments
Binary search
◦ Efficient for large, sorted arrays
◦ Eliminates half of the elements in search through each
pass
Compare middle array element to search key
If element equals key
Return array index
If element is less than key
Repeat search on first half of array
If element is greater then key
Repeat search on second half of array
Continue search until
element equals search key (success)
Search contains one element not equal to key (failure)
BinarySearch.java
Line 14
Declare array of ints
Declae array of ints
BinarySearch.java
Lines 48-51
Allocate 15 ints for
array and populate
array with even ints
Line 56
Invoked when user
presses Enter
BinarySearch.java
Line 65
Invoke method
binarySearch, using
array and search key
as arguments
BinarySearch.java
Lines 93-94
If search key matches
middle array element,
return element index
Lines 97-98
If search key is less than
middle array element,
repeat search on first
array half
Lines 101-102
If search key is greater
than middle array
element, repeat search on
second array half
Lines 112-137
Method buildOutput displays
array contents being
searched
BinarySearch.java
Line 128
Display an asterisk next
to middle element
Sorting
Motivation
Generally, to arrange a list of elements in some order
List of numbers
10 20 50 30 40 60 25 (Unsorted list)
10 20 25 30 40 50 60 (Sorted list, ascending)
60 50 40 30 25 20 10 (Sorted list, descending)
List of alphabets
P A K I S T A N
AA I K N P S T
T S P N K I A A
(Unsorted list)
(Sorted list, ascending)
(Sorted list, descending)
Sorting Algorithms
1. Bubble Sort
2. Selection Sort
There are few more sorting algorithms; you
can find them in a book on data structures
and algorithms (or on the Web)
Bubble Sort Algorithm: Informal
Repeatedly compare the elements at
consecutive locations in a given list, and do the
following until the elements are in required
order:
If elements are not in the required order, swap them
(change their position)
Otherwise do nothing
Bubble Sort in Action: Phase 1
3
3
3
3
3
3
3
3
45
15
15
15
15
15
15
15
45
3
45
45
45
45
45
45
45
15
15
40
40
40
40
40
40
40
40
40
8
8
8
8
22
22
22
22
22
12
12
12
22
8
8
8
8
8
5
5
22
12
12
12
12
12
12
22
22
5
5
5
5
5
5
5
14
14
14
14
14
14
14
14
14
8
c
o
m
p
a
r
i
s
o
n
s
Bubble Sort in Action: Phase 2
45
45
45
45
45
45
45
45
3
3
3
3
3
3
3
40
15
15
15
15
15
15
40
3
40
40
40
40
40
40
15
15
22
22
22
22
22
22
22
22
8
8
8
14
14
14
14
14
12
12
14
8
8
8
8
8
5
14
12
12
12
12
12
12
14
5
5
5
5
5
5
5
7
c
o
m
p
a
r
i
s
o
n
s
Bubble Sort in Action: Phase 3
45
45
45
45
45
45
45
40
40
40
40
40
40
40
3
3
3
3
3
3
22
15
15
15
15
15
22
3
22
22
22
22
22
15
15
14
14
14
14
14
14
14
8
8
12
12
12
12
12
12
12
8
8
8
8
8
5
5
5
5
5
5
5
6
c
o
m
p
a
r
i
s
o
n
s
Bubble Sort in Action: Phase 4
45
45
45
45
45
45
40
40
40
40
40
40
22
22
22
22
22
22
3
3
3
3
3
15
15
15
15
15
15
3
14
14
14
14
14
14
12
12
12
12
12
12
8
8
8
8
8
8
5
5
5
5
5
5
5
c
o
m
p
a
r
i
s
o
n
s
Bubble Sort in Action: Phase 5
45
45
45
45
45
40
40
40
40
40
22
22
22
22
22
15
15
15
15
15
3
3
3
3
14
14
14
14
14
3
12
12
12
12
12
8
8
8
8
8
5
5
5
5
5
4
c
o
m
p
a
r
i
s
o
n
s
Bubble Sort in Action: Phase 6
45
45
45
45
40
40
40
40
22
22
22
22
15
15
15
15
14
14
14
14
3
3
3
12
12
12
12
3
8
8
8
8
5
5
5
5
3
c
o
m
p
a
r
i
s
o
n
s
Bubble Sort in Action: Phase 7
45
45
45
40
40
40
22
22
22
15
15
15
14
14
14
12
12
12
3
3
8
8
8
3
5
5
5
2
c
o
m
p
a
r
i
s
o
n
s
Bubble Sort in Action: Phase 8
45
45
40
40
22
22
15
15
14
14
12
12
8
8
3
5
5
3
1
c
o
m
p
a
r
i
s
o
n
Bubble Sort Algorithm in Java
void bubbleSort(int List[])
{ int temp;
int size = List.length;
for (i = 0; i < size - 1; i++)
{
for (j = 0; j < size – (i + 1); j++)
{
if (List[j] > List[j+1])
{
//swap
temp = List[j];
List[j] = List[j+1];
List[j+1] = temp;
}
}
}
}