Searching Elements in an Array: Linear and Binary Search. Spring Semester 2007 Programming and Data Structure 1

Similar documents
Searching an Array: Linear and Binary Search. 21 July 2009 Programming and Data Structure 1

Sorting and Searching. Sudeshna Sarkar 7 th Feb 2017

CS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-0-0)

Data Structures And Algorithms

Lecture 6 Sorting and Searching

Divide and Conquer. Algorithm Fall Semester

UNIT 7. SEARCH, SORT AND MERGE

CS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-0-0)

Sorting. Task Description. Selection Sort. Should we worry about speed?

We can use a max-heap to sort data.

Make sure the version number is marked on your scantron sheet. This is Version 1

Data Structures and Algorithms for Engineers

Overview of Sorting Algorithms

Bubble sort starts with very first two elements, comparing them to check which one is greater.

Cpt S 122 Data Structures. Sorting

PERFORMANCE OF VARIOUS SORTING AND SEARCHING ALGORITHMS Aarushi Madan Aarusi Tuteja Bharti

International Journal Of Engineering Research & Management Technology

CS 137 Part 8. Merge Sort, Quick Sort, Binary Search. November 20th, 2017

Algorithm Analysis. Spring Semester 2007 Programming and Data Structure 1

ECE 2574: Data Structures and Algorithms - Basic Sorting Algorithms. C. L. Wyatt

Fundamental problem in computing science. putting a collection of items in order. Often used as part of another algorithm

Sorting. CPSC 259: Data Structures and Algorithms for Electrical Engineers. Hassan Khosravi

Pointers. Introduction

! Search: find a given item in a list, return the. ! Sort: rearrange the items in a list into some. ! list could be: array, linked list, string, etc.

Module 08: Searching and Sorting Algorithms

Data Types. Operators, Assignment, Output and Return Statements

Divide and Conquer Sorting Algorithms and Noncomparison-based

! Search: find a given item in a list, return the. ! Sort: rearrange the items in a list into some. ! list could be: array, linked list, string, etc.

! Search: find a given item in a list, return the. ! Sort: rearrange the items in a list into some. ! list could be: array, linked list, string, etc.

O(n): printing a list of n items to the screen, looking at each item once.

Internal Sort by Comparison II

Lecture 7 Quicksort : Principles of Imperative Computation (Spring 2018) Frank Pfenning

IS 709/809: Computational Methods in IS Research. Algorithm Analysis (Sorting)

DATA STRUCTURES AND ALGORITHMS

Component 02. Algorithms and programming. Sorting Algorithms and Searching Algorithms. Matthew Robinson

Problem. Input: An array A = (A[1],..., A[n]) with length n. Output: a permutation A of A, that is sorted: A [i] A [j] for all. 1 i j n.

UNIT-2. Problem of size n. Sub-problem 1 size n/2. Sub-problem 2 size n/2. Solution to the original problem

Sorting. Sorting in Arrays. SelectionSort. SelectionSort. Binary search works great, but how do we create a sorted array in the first place?

Lecture 7: Searching and Sorting Algorithms

Sorting is ordering a list of objects. Here are some sorting algorithms

The complexity of Sorting and sorting in linear-time. Median and Order Statistics. Chapter 8 and Chapter 9

Internal Sort by Comparison II

9/10/12. Outline. Part 5. Computational Complexity (2) Examples. (revisit) Properties of Growth-rate functions(1/3)

Searching Algorithms/Time Analysis

COMP2012H Spring 2014 Dekai Wu. Sorting. (more on sorting algorithms: mergesort, quicksort, heapsort)

2/14/13. Outline. Part 5. Computational Complexity (2) Examples. (revisit) Properties of Growth-rate functions(1/3)

Sorting and Searching Algorithms

Internal Sort by Comparison II

The University Of Michigan. EECS402 Lecture 07. Andrew M. Morgan. Sorting Arrays. Element Order Of Arrays

COMP 250. Lecture 7. Sorting a List: bubble sort selection sort insertion sort. Sept. 22, 2017

Sorting. Sorting. Stable Sorting. In-place Sort. Bubble Sort. Bubble Sort. Selection (Tournament) Heapsort (Smoothsort) Mergesort Quicksort Bogosort

Presentation for use with the textbook, Algorithm Design and Applications, by M. T. Goodrich and R. Tamassia, Wiley, Merge Sort & Quick Sort

Syllabus. 3. Sorting. specification

Sorting. There exist sorting algorithms which have shown to be more efficient in practice.

Algorithms and Data Structures (INF1) Lecture 7/15 Hua Lu

CSE 143. Two important problems. Searching and Sorting. Review: Linear Search. Review: Binary Search. Example. How Efficient Is Linear Search?

Analysis of Algorithms. Unit 4 - Analysis of well known Algorithms

SAMPLE OF THE STUDY MATERIAL PART OF CHAPTER 6. Sorting Algorithms

1 a = [ 5, 1, 6, 2, 4, 3 ] 4 f o r j i n r a n g e ( i + 1, l e n ( a ) 1) : 3 min = i

Computer Science 385 Analysis of Algorithms Siena College Spring Topic Notes: Divide and Conquer

Computer Science & Engineering 150A Problem Solving Using Computers

12/1/2016. Sorting. Savitch Chapter 7.4. Why sort. Easier to search (binary search) Sorting used as a step in many algorithms

Sorting. Sorting. 2501ICT/7421ICTNathan. René Hexel. School of Information and Communication Technology Griffith University.

Sorting. Bubble Sort. Pseudo Code for Bubble Sorting: Sorting is ordering a list of elements.

Sorting. CSE 143 Java. Insert for a Sorted List. Insertion Sort. Insertion Sort As A Card Game Operation. CSE143 Au

Parallel Sorting Algorithms

DIVIDE & CONQUER. Problem of size n. Solution to sub problem 1

Sorting. Order in the court! sorting 1

Sorting Algorithms. + Analysis of the Sorting Algorithms

CSE 2123 Sorting. Jeremy Morris

8/5/10 TODAY'S OUTLINE. Recursion COMP 10 EXPLORING COMPUTER SCIENCE. Revisit search and sorting using recursion. Recursion WHAT DOES THIS CODE DO?

Chapter 4. Divide-and-Conquer. Copyright 2007 Pearson Addison-Wesley. All rights reserved.

Unit Outline. Comparing Sorting Algorithms Heapsort Mergesort Quicksort More Comparisons Complexity of Sorting 2 / 33

Searching for Information. A Simple Method for Searching. Simple Searching. Class #21: Searching/Sorting I

Lecture Notes 14 More sorting CSS Data Structures and Object-Oriented Programming Professor Clark F. Olson

Structured programming

Sorting. Weiss chapter , 8.6

Comparison Sorts. Chapter 9.4, 12.1, 12.2

Sorting. CSC 143 Java. Insert for a Sorted List. Insertion Sort. Insertion Sort As A Card Game Operation CSC Picture

Algorithms. Chapter 8. Objectives After studying this chapter, students should be able to:

Chapter 7 Sorting. Terminology. Selection Sort

Algorithm for siftdown(int currentposition) while true (infinite loop) do if the currentposition has NO children then return

CHAPTER 7 Iris Hui-Ru Jiang Fall 2008

Lecture 19 Sorting Goodrich, Tamassia

Unit-2 Divide and conquer 2016

Objectives. Chapter 23 Sorting. Why study sorting? What data to sort? Insertion Sort. CS1: Java Programming Colorado State University

Sorting. Order in the court! sorting 1

Sorting. Quicksort analysis Bubble sort. November 20, 2017 Hassan Khosravi / Geoffrey Tien 1

Lecture Notes on Quicksort

Sorting Goodrich, Tamassia Sorting 1

Arrays and Applications

CS 171: Introduction to Computer Science II. Quicksort

Topics Recursive Sorting Algorithms Divide and Conquer technique An O(NlogN) Sorting Alg. using a Heap making use of the heap properties STL Sorting F

Lecture 9: Sorting Algorithms

Lecture 2 Arrays, Searching and Sorting (Arrays, multi-dimensional Arrays)

Arrays. Dr. Madhumita Sengupta. Assistant Professor IIIT Kalyani

Sorting. Bringing Order to the World

Searching and Sorting

CSC Design and Analysis of Algorithms

Arrays in C. Prof. Indranil Sen Gupta Dept. of Computer Science & Engg. Indian Institute of Technology Kharagpur. Basic Concept

Transcription:

Searching Elements in an Array: Linear and Binary Search Spring Semester 2007 Programming and Data Structure 1

Searching Check if a given element (called key) occurs in the array. Example: array of student records; rollno can be the key. Two methods to be discussed: If the array elements are unsorted. Linear search If the array elements are sorted. Binary search Spring Semester 2007 Programming and Data Structure 2

Linear Search Spring Semester 2007 Programming and Data Structure 3

Basic Concept Basic idea: Start at the beginning of the array. Inspect elements one by one to see if it matches the key. Time complexity: A measure of how long an algorithm takes to run. If there are n elements in the array: Best case: match found in first element (1 search operation) Worst case: no match found, or match found in the last element (n search operations) Average case: (n + 1) / 2 search operations Spring Semester 2007 Programming and Data Structure 4

Contd. /* The function returns the array index where the match is found. It returns -1 if there is no match. */ int linear_search (int a[], int size, int key) int pos = 0; while ((pos < size) && (a[pos]!= key)) pos++; if (pos < size) return pos; /* Return the position of match */ return -1; /* No match found */ Spring Semester 2007 Programming and Data Structure 5

Contd. int x[]= 12, -3, 78, 67, 6, 50, 19, 10; Trace the following calls : search (x, 8, 6) ; Returns 4 search (x, 8, 5) ; Returns -1 Spring Semester 2007 Programming and Data Structure 6

Binary Search Spring Semester 2007 Programming and Data Structure 7

Basic Concept Binary search works if the array is sorted. Look for the target in the middle. If you don t find it, you can ignore half of the array, and repeat the process with the other half. In every step, we reduce the number of elements to search in by half. Spring Semester 2007 Programming and Data Structure 8

The Basic Strategy What we want? Find split between values larger and smaller than key: x: 0 L <=key >key n-1 R Situation while searching: Initially L and R contains the indices of first and last elements. Look at the element at index [(L+R)/2]. Move L or R to the middle depending on the outcome of test. Spring Semester 2007 Programming and Data Structure 9

Contd. /* If key appears in x[0..size-1], return its location, pos such that x[pos]==key. If not found, return -1 */ int bin_search (int x[], int size, int key) int L, R, mid; ; while ( ) ; ; Spring Semester 2007 Programming and Data Structure 10

The basic search iteration int bin_search (int x[], int size, int key) int L, R, mid; ; while ( ) mid = (L + R) / 2; if (x[mid] <= key) L = mid; else R = mid; ; Spring Semester 2007 Programming and Data Structure 11

Loop termination int bin_search (int x[], int size, int key) int L, R, mid; ; while ( L+1!= R ) mid = (L + R) / 2; if (x[mid] <= key) L = mid; else R = mid; ; Spring Semester 2007 Programming and Data Structure 12

Return result int bin_search (int x[], int size, int key) int L, R, mid; ; while ( L+1!= R ) mid = (L + R) / 2; if (x[mid] <= key) L = mid; else R = mid; if (L >= 0 && x[l] == key) return L; else return -1; Spring Semester 2007 Programming and Data Structure 13

Initialization int bin_search (int x[], int size, int key) int L, R, mid; L = -1; R = size; while ( L+1!= R ) mid = (L + R) / 2; if (x[mid] <= key) L = mid; else R = mid; if (L >= 0 && x[l] == key) return L; else return -1; Spring Semester 2007 Programming and Data Structure 14

Binary Search Examples Sorted array -17-5 3 6 12 21 45 63 50 Trace : binsearch (x, 9, 3); binsearch (x, 9, 145); binsearch (x, 9, 45); L= 1; R= 9; x[4]=12; L= 1; R=4; x[1]= 5; L= 1; R=4; x[2]=3; L=2; R=4; x[3]=6; L=2; R=3; return L; We may modify the algorithm by checking equality with x[mid]. Spring Semester 2007 Programming and Data Structure 15

Is it worth the trouble? Suppose that the array x has 1000 elements. Ordinary search If key is a member of x, it would require 500 comparisons on the average. Binary search after 1st compare, left with 500 elements. after 2nd compare, left with 250 elements. After at most 10 steps, you are done. Spring Semester 2007 Programming and Data Structure 16

Time Complexity If there are n elements in the array. Number of searches required: log 2 n For n = 64 (say). Initially, list size = 64. After first compare, list size = 32. After second compare, list size = 16. After third compare, list size = 8.. After sixth compare, list size = 1. 2 k = n, where k is the number of steps. log 2 64 = 6 log 2 1024 = 10 Spring Semester 2007 Programming and Data Structure 17

Sorting Spring Semester 2007 Programming and Data Structure 18

The Basic Problem Given an array x[0], x[1],..., x[size-1] reorder entries so that x[0] <= x[1] <=... <= x[size-1] List is in non-decreasing order. We can also sort a list of elements in nonincreasing order. Spring Semester 2007 Programming and Data Structure 19

Example Original list: 10, 30, 20, 80, 70, 10, 60, 40, 70 Sorted in non-decreasing order: 10, 10, 20, 30, 40, 60, 70, 70, 80 Sorted in non-increasing order: 80, 70, 70, 60, 40, 30, 20, 10, 10 Spring Semester 2007 Programming and Data Structure 20

What we want? Data sorted in order Sorting Problem x: 0 Unsorted list size-1 Sorted list Spring Semester 2007 Programming and Data Structure 21

Selection Sort Spring Semester 2007 Programming and Data Structure 22

General situation : x: smallest elements, sorted How it works? 0 k size-1 remainder, unsorted Step : Find smallest element, mval, in x[k..size-1] Swap smallest element with x[k], then increase k. 0 k mval size-1 swap Spring Semester 2007 Programming and Data Structure 23

Subproblem /* Yield index of smallest element in x[k..size-1];*/ int min_loc (int x[], int k, int size) int j, pos; pos = k; for (j=k+1; j<size; j++) if (x[j] < x[pos]) pos = j; return pos; Spring Semester 2007 Programming and Data Structure 24

The main sorting function /* Sort x[0..size-1] in non-decreasing order */ int sel_sort (int x[], int size) int k, m; for (k=0; k<size-1; k++) m = min_loc (x, k, size); temp = a[k]; a[k] = a[m]; SWAP a[m] = temp; Spring Semester 2007 Programming and Data Structure 25

int main() int x[ ]=-45,89,-65,87,0,3,-23,19,56,21,76,-50; int i; for(i=0;i<12;i++) printf("%d ",x[i]); printf("\n"); sel_sort(x,12); for(i=0;i<12;i++) printf("%d ",x[i]); printf("\n"); -45 89-65 87 0 3-23 19 56 21 76-50 -65-50 -45-23 0 3 19 21 56 76 87 89 Spring Semester 2007 Programming and Data Structure 26

Example x: x: x: 3 12-5 6 142 21-17 45-17 12-5 6 142 21 3 45-17 -5 12 6 142 21 3 45 x: -17-5 3 6 12 21 142 45 x: -17-5 3 6 12 21 142 45 x: -17-5 3 6 12 21 45 142 x: x: -17-5 3 6 142 21 12 45-17 -5 3 6 142 21 12 45 Spring Semester 2007 Programming and Data Structure 27

Analysis How many steps are needed to sort n items? Total number of steps proportional to n 2. No. of comparisons? (n-1)+(n-2)+ +1= n(n-1)/2 Of the order of n 2 Worst Case? Best Case? Average Case? Spring Semester 2007 Programming and Data Structure 28

Insertion Sort Spring Semester 2007 Programming and Data Structure 29

How it works? General situation : x: 0 i size-1 sorted i i remainder, unsorted Compare and shift till x[i] is larger. j 0 size-1 Spring Semester 2007 Programming and Data Structure 30

Insertion Sort void insert_sort (int list[], int size) int i,j,item; for (i=1; i<size; i++) item = list[i] ; for (j=i-1; (j>=0)&& (list[j] > i); j--) list[j+1] = list[j]; list[j+1] = item ; Spring Semester 2007 Programming and Data Structure 31

int main() int x[ ]=-45,89,-65,87,0,3,-23,19,56,21,76,-50; int i; for(i=0;i<12;i++) printf("%d ",x[i]); printf("\n"); insert_sort(x,12); for(i=0;i<12;i++) printf("%d ",x[i]); printf("\n"); -45 89-65 87 0 3-23 19 56 21 76-50 -65-50 -45-23 0 3 19 21 56 76 87 89 Spring Semester 2007 Programming and Data Structure 32

Time Complexity Number of comparisons and shifting: Worst case? 1 + 2 + 3 + + (n-1) = n(n-1)/2 Best case? 1 + 1 + to (n-1) terms = (n-1) Spring Semester 2007 Programming and Data Structure 33

Bubble Sort Spring Semester 2007 Programming and Data Structure 34

How it works? The sorting process proceeds in several passes. In every pass we go on comparing neighboring pairs, and swap them if out of order. In every pass, the largest of the elements under considering will bubble to the top (i.e., the right). 10 5 17 11-3 12 5 10 17 11-3 12 5 10 17 11-3 12 5 10 11 17-3 12 5 10 11-3 17 12 5 10 11-3 12 17 Largest Spring Semester 2007 Programming and Data Structure 35

How the passes proceed? In pass 1, we consider index 0 to n-1. In pass 2, we consider index 0 to n-2. In pass 3, we consider index 0 to n-3. In pass n-1, we consider index 0 to 1. Spring Semester 2007 Programming and Data Structure 36

Bubble Sort void swap(int *x, int *y) int tmp = *x; *x = *y; *y = tmp; void bubble_sort (int x[], int n) int i,j; for (i=n-1; i>0; i--) for (j=0; j<i; j++) if (x[j] > x[j+1]) swap(&x[j],&x[j+1]); Spring Semester 2007 Programming and Data Structure 37

int main() int x[ ]=-45,89,-65,87,0,3,-23,19,56,21,76,-50; int i; for(i=0;i<12;i++) printf("%d ",x[i]); printf("\n"); bubble_sort(x,12); for(i=0;i<12;i++) printf("%d ",x[i]); printf("\n"); -45 89-65 87 0 3-23 19 56 21 76-50 -65-50 -45-23 0 3 19 21 56 76 87 89 Spring Semester 2007 Programming and Data Structure 38

Time Complexity Number of comparisons : Worst case? 1 + 2 + 3 + + (n-1) = n(n-1)/2 Best case? Same Spring Semester 2007 Programming and Data Structure 39

How do you make best case with (n-1) comparisons only? By maintaining a variable flag, to check if there has been any swaps in a given pass. If not, the array is already sorted. Spring Semester 2007 Programming and Data Structure 40

void bubble_sort (int x[], int n) int i,j; int flag = 0; for (i=n-1; i>0; i--) for (j=0; j<i; j++) if (x[j] > x[j+1]) swap(&x[j],&x[j+1]); flag = 1; if (flag == 0) return; Spring Semester 2007 Programming and Data Structure 41

Some Efficient Sorting Algorithms Spring Semester 2007 Programming and Data Structure 42

Two of the most popular sorting algorithms are based on divide-and-conquer approach. Quick sort Merge sort Basic concept (divide-and-conquer method): sort (list) if the list has length greater than 1 Partition the list into lowlist and highlist; sort (lowlist); sort (highlist); combine (lowlist, highlist); Spring Semester 2007 Programming and Data Structure 43

Quick Sort Spring Semester 2007 Programming and Data Structure 44

How it works? At every step, we select a pivot element in the list (usually the first element). We put the pivot element in the final position of the sorted list. All the elements less than or equal to the pivot element are to the left. All the elements greater than the pivot element are to the right. Spring Semester 2007 Programming and Data Structure 45

Partitioning x: 0 size-1 pivot Values smaller Values greater Perform partitioning Perform partitioning Spring Semester 2007 Programming and Data Structure 46

Example 26 33 35 29 19 12 22 22 35 29 19 12 33 22 12 29 19 35 33 22 12 19 29 35 33 19 22 12 26 29 35 33 The partitioning process Recursively carry out the partitioning Spring Semester 2007 Programming and Data Structure 47

void print (int x[], int low, int high) int i; for(i=low; i<=high; i++) printf(" %d", x[i]); printf("\n"); void swap (int *a, int *b) int tmp=*a; *a=*b; *b=tmp; Spring Semester 2007 Programming and Data Structure 48

void partition (int x[], int low, int high) int i = low+1, j = high; int pivot = x[low]; if (low >= high) return; while (i<j) while ((x[i]<pivot) && (i<high)) i++; while ((x[j]>=pivot) && (j>low)) j--; if (i<j) swap (&x[i], &x[j]); if (j==high) swap (&x[j], &x[low]); partition (x, low, high-1); else if (i==low+1) partition (x, low+1, high); else swap (&x[j], &x[low]); partition (x, low, j-1); partition (x, j+1, high); Spring Semester 2007 Programming and Data Structure 49

int main (int argc, char *argv[]) int *x; int i=0; int num; num = argc - 1; x = (int *) malloc(num * sizeof(int)); for (i=0; i<num; i++) x[i] = atoi(argv[i+1]); partition(x,0,num-1); printf( Sorted list: "); print (x,0,num-1); Spring Semester 2007 Programming and Data Structure 50

Trace of Partitioning./a.out 45-56 78 90-3 -6 123 0-3 45 69 68 45-56 78 90-3 -6 123 0-3 45 69 68-6 -56-3 0-3 45 123 90 78 45 69 68-56 -6-3 0-3 -3 0-3 68 90 78 45 69 123 45 68 78 90 69-3 0 69 78 90 Sorted list: -56-6 -3-3 0 45 45 68 69 78 90 123 Spring Semester 2007 Programming and Data Structure 51

Time Complexity Worst case: n 2 ==> list is already sorted Average case: n log 2 n Statistically, quick sort has been found to be one of the fastest algorithms. Spring Semester 2007 Programming and Data Structure 52

Corollary of quick sort: Given a list of numbers stored in an array, determine how many numbers are smaller than a given number p? Given a list of integers (negative and nonnegative), reorder the list so that all negative numbers precede the non-negative ones. Spring Semester 2007 Programming and Data Structure 53

Merge Sort Spring Semester 2007 Programming and Data Structure 54

Merge Sort Input Array Part-I Part-II Part-I Part-II Part-I Part-II Merge Sorted Arrays Split Spring Semester 2007 Programming and Data Structure 55

Merging two sorted arrays p a p b a Sorted Array b Sorted Array 0 m 0 n c Merged sorted array 0 m+n-1 Move and copy elements pointed by p a if its value is smaller than the element pointed by p b in (m+n-1) operations; otherwise, copy elements pointed by p b. Spring Semester 2007 Programming and Data Structure 56

Example Initial array A contains 14 elements: 66, 33, 40, 22, 55, 88, 60, 11, 80, 20, 50, 44, 77, 30 Pass 1 :: Merge each pair of elements (33, 66) (22, 40) (55, 88) (11, 60) (20, 80) (44, 50) (30, 70) Pass 2 :: Merge each pair of pairs (22, 33, 40, 66) (11, 55, 60, 88) (20, 44, 50, 80) (30, 77) Pass 3 :: Merge each pair of sorted quadruplets (11, 22, 33, 40, 55, 60, 66, 88) (20, 30, 44, 50, 77, 80) Pass 4 :: Merge the two sorted subarrays to get the final list (11, 20, 22, 30, 33, 40, 44, 50, 55, 60, 66, 77, 80, 88) Spring Semester 2007 Programming and Data Structure 57

void merge_sort (int *a, int n) int i, j, k, m; int *b, *c; if (n>1) k = n/2; m = n-k; b = (int *) calloc(k,sizeof(int)); c = (int *) calloc(m,sizeof(int)); for (i=0; i<k; i++) b[i]=a[i]; for (j=k; j<n; j++) c[j-l]=a[j]; merge_sort (b, k); merge_sort (c, m); merge (b, c, a, k, m); free(b); free(c); Spring Semester 2007 Programming and Data Structure 58

void merge (int *a, int *b, int *c, int m, int n) int i, j, k, p; i = j = k = 0; do if (a[i] < b[j]) c[k]=a[i]; i=i+1; else c[k]=b[j]; j=j+1; k++; while ((i<m) && (j<n)); if (i == m) for (p=j; p<n; p++) c[k]=b[p]; k++; else for (p=i; p<m; p++) c[k]=a[p]; k++; Spring Semester 2007 Programming and Data Structure 59

main() int i, num; int a[ ] = -56,23,43,-5,-3,0,123,-35,87,56,75,80; for (i=0;i<12;i++) printf ("%d ",a[i]); printf ("\n"); merge_sort (a, 12); printf ( \nsorted list:"); for (i=0;i<12;i++) printf ( %d", a[i]); printf ("\n"); Spring Semester 2007 Programming and Data Structure 60