260 likes | 345 Views
11.5 SORTING ARRAY. Sorting is the process of transforming a list into an equivalent list, in which the elements are arranged in ascending or descending order. A sorting list is called an ordered list. arr[0]<= arr[1] <= ….,<= arr[n-2]<=arr[n-1]. Bubble Sort.
E N D
11.5 SORTING ARRAY • Sorting is the process of transforming a list • into an equivalent list, in which the elements are arranged in ascending or descending order. • A sorting list is called an ordered list. • arr[0]<= arr[1] <= ….,<= arr[n-2]<=arr[n-1]
Bubble Sort • Comparing two consecutive array elements and swapping them if the first is greater than the second. • At the end of the first pass,we have succeeded in pushing the largest value in the array to its end . • Fig 11.9 A C function that sorts an array using bubble sort . • typedef int list_item_type;
Selecting Sort • Of selecting the largest array element and swapping it with the last array element . • Figure 11.11 A C function that sorts an array using selection sort
Insertion Sort • Of inserting a new item into a list of ordered items. • Figure 11.13 A C function that sorts an array using insertion sort .
Constructing a Sort Library • Figure 11.14 the header file sort.h for the • programmer-defined sort library. • #include “sort.h”.
11.6 SEARCHING ARRAYS • We search a list stored in an array to determine whether it contains an element that matching a given
Sequential Search • We access list elements , starting with the first ,and compare each element with the search key. • If we find a match , the search is successful. • If we access and compare the last list element and still have no match , then the search is unsuccessful.
Improve the efficiency of this algorithm by running it on ordered list . • Algorithm terminates if the search key value turns out to be less than an array element.
Binary Search • Compares the search key value with the value of the list element that is midway in the list . • Figure 11.20 A C function that searches an array using binary search
Figure 11.21 Comparing efficiencies of sequential and binary search • List_size sequential search binary search • 100 100 7 • 1,000,000 1,000,000 20 • 1,000,000,000 1,000,000,000 30
Constructing Search Library • #include “search.h” • #include <string.h>
11.7 EXAMPLE PROGRAM 2:A C Program that Creates, Sort, and Searches a One-Dimensional Array of Integers
11.8 HIGHT –DIMENSIONAL ARRAYS • An array of one-dimensional arrays is called • a two-dimensional arrays; • An array of two-dimensional arrays is called a three-dimensional array,and so on. A two-dimensional arrays is equivalent to a table of a fixed number of rows and a fixed number of columns .
Declaring Two-Dimensional Arrays • int test_scores[4][3]; • The first subscript is the number of rows, and the second is the number of columns. • When the complier encounters the declaration for a two-dimensional array,it allocates memory locations for its elements in a linear fashion. • The memory locations for the elements on row 0 are followed by the memory locations for the elements on row 1;
Initialization of Two-Dimensional arrays • int test_scores[4][3]= • {95,80,78,69,75,81,100,98,100,98,85,87}; • int test_scores[][3]= • {{95,80,78},{69,75,81},{100,98,100},{98,85,87}};
Operations on Two–Dimensional Arrays • If we declare a two-dimensional array in the formal parameter list as int b [][], • Each element of the one-dimensional array is a one-dimensional array. • We must also tell the complier about the number of elements in each row of the two-dimensional array. • Therefore in the formal parameter list the proper declaration must be as int b[][20],thus enabling the complier to compute the offset for the second row as 2*20=40.
The rules for passing two-dimensional arrays to functions • 1. Be declared • void input_tale(int *no_of _rows , • int *no_of_columns, • int arr[][COLUMNS_SIZE]);
2.in its prototype. • void input_tale(int *no_of _rows , • int *no_of_columns, • int arr[][COLUMNS_SIZE]);
3. In a call • input_table(&rows, &columns , test_scores );
Two-Dimensional Arrays and Pointers • int t[4][3] • t as a pointer to row 0. • *t a pointer to t[0][0]. • We can access its content by again applying the indirection operator as *(*t). • it is *t+1 ,and the reference to t[0][1] in pointer/offset notion is *(*t+1).
The pointer to row 1 is t+1 . • For example , the pointer to the third element in row 1 is *(t + 1 ) +2 ,and the name of that element is *(*(t + 1) +2). • *(*( t + i ) + j) is the name of the array element t[i][j] in pointer/offset notation
for (i=0; i<4; i++) • { printf (“\nROW %d OF array t: “, i); • for (j=0 ; j<3 ; j++) • printf (“%d” , t[i][j]); • /*end for */ • } /* end for */
for (i=0 ; i < 4 ; i++ ) • { printf (“\nROW %d OF array t: “, i); • for (j=0 ; j<3 ; j++) • printf (“%d” , *(* t + i ) + j ); • /*end for */ • } /* end for */
Suggest that you avoid using pointer/offset notation unless program efficiency for compilation turns out to be very important in you application.
11.9 EXAMPLE PROGRAM 3:A C Function that Generates a Bar Chart