SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
14.1 IntroductIon to SEArcHInG
linear search binary search
14.2 LInEAr SEArcH
sequential search
A[]
LEArnInG objEctIvE
Searching and sorting are two of the most common operations in computer science.
Searching and
Sorting
chapter 14
Searching and Sorting 425
and the value to be searched is VAL = 7, then searching means
POS = 3
of POS and I while
be executed till I is less than N (total number of elements
VAL
the value of I
VAL
VAL and no match is found, then it means that VAL is not
Complexity of Linear Search Algorithm
Linear search executes in O(n) n
VAL
VAL is not
n
Programming ExamPlE
1.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
}
}
}
LINEAR_SEARCH(A, N, VAL)
Step 1: [INITIALIZE] SET POS = -1
Step 2: [INITIALIZE] SET I = 1
Step 3: Repeat Step 4 while I<=N
Step 4: IF A[I] = VAL
SET POS = I
PRINT POS
Go to Step 6
[END OF IF]
[END OF LOOP]
Step 6: EXIT
SET I = I + 1
Step 5: IF POS = –1
PRINT VALUE IS NOT PRESENT
IN THE ARRAY
[END OF IF]
"
"
Figure 14.1 Algorithm for linear search
426 Data Structures Using C
}
14.3 Binary Search
and the value to be searched is
and
is less than VAL
and
is less than VAL
and
and
and
is calculated as
and
POS
VAL is not equal to , then the values of , , and
VAL is smaller or greater than
(a) If , then VAL
(b) If , then VAL
VAL
, , and POS while
executed until is less than or equal to
is equal to VAL
Searching and Sorting 427
found, then the value of POS
is not found, and if the value of
is greater than VAL, the value of is
is greater
than VAL, then the value of
, then VAL is
Complexity of Binary Search Algorithm
,
n is the number of elements in the
n)
n
Programming ExamPlE
2.
##include <stdio.h>
#include <stdlib.h>
#include <conio.h>
}
}
BINARY_SEARCH(A, lower_bound, upper_bound, VAL)
Step 1: [INITIALIZE] SET BEG = lower_bound
END = upper_bound, POS = - 1
Step 2: Repeat Steps 3 and 4 while BEG <= END
Step 3: SET MID = (BEG + END)/2
Step 4: IF A[MID] = VAL
SET POS = MID
PRINT POS
Go to Step 6
ELSE IF A[MID] > VAL
SET END = MID - 1
ELSE
SET BEG = MID + 1
[END OF IF]
[END OF LOOP]
Step 5: IF POS = -1
PRINT “VALUE IS NOT PRESENT IN THE ARRAY”
[END OF IF]
Step 6: EXIT
Figure 14.2 Algorithm for binary search
428 Data Structures Using C
else
}
}
}
}
}
}
}
14.4 inTerPOLaTiOn Search
calculation is done based on the values
INTERPOLATION_SEARCH (A, lower_bound, upper_bound, VAL)
Figure 14.3 Algorithm for interpolation search
Searching and Sorting 429
VAL
Low Item to be searched High
Middle = (low+ high)/2
(a) Binary search divides the list into two equal halves
VAL
Low Item to be searched High
Middle = low + (high - low) ( (key – a[low]) /(a[high] – a[low]))¥
(b) Interpolation search divides the list into two equal halves
Figure 14.4 Difference between binary search and interpolation search
Complexity of Interpolation Search Algorithm
When n
O(n)
example 14.1 Given a list of numbers . Search
Solution
Programming ExamPlE
3.
#include <stdio.h>
#include <conio.h>
430 Data Structures Using C
else
}
}
else
}
14.5 JUMP Search
3 7
3 7
3 7
Searching and Sorting 431
JUMP_SEARCH (A, lower_bound, upper_bound, VAL, N)
POS = I
Figure 14.5
Advantage of Jump Search over Linear Search
Advantage of Jump Search over Binary Search
O(log n)
How to Choose the Step Length?
n
n
Further Optimization of Jump Search
432 Data Structures Using C
Searching can start from somewhere middle in the list rather than from the beginning to optimize
performance.
n =
Complexity of Jump Search Algorithm
n
O
Programming ExamPlE
4.
#include <stdio.h>
#include <math.h>
#include <conio.h>
{
{
else
{
int main()
{
Searching and Sorting 433
else
Fibonacci Search
O(log n).
14.6 IntroductIon to SortInG
A A are
< A[1] < < ...... < A[N]
∑ Internal sorting
∑ External sorting
14.6.1 Sorting on Multiple Keys
∑
434 Data Structures Using C
∑
∑
note sort key. A
primary sort key
the second is known as the secondary sort key
name department Salary Phone number
Janak 1000000 9812345678
Computer Science 890000 9910023456
900000 7838987654
Huma 1100000 9654123456
Computer Science 750000 9350123455
name department Salary Phone number
Computer Science 750000 9350123455
Computer Science 890000 9910023456
900000 7838987654
Huma 1100000 9654123456
Janak 1000000 9812345678
14.6.2 Practical considerations for Internal Sorting
∑
∑
∑
∑
∑
∑
14.7 bubbLE Sort
Searching and Sorting 435
bubble sorting
note
Technique
A[1] A[1]
A[1] A[1]
A[1] A[1]
A[1]
Example 14.2 A[]
Pass 1:
29, 52
63, 87
27, 87
19 87
54, 87
Pass 2:
29, 30
27, 63
436 Data Structures Using C
19, 63
54, 63
Pass 3:
27, 52
, 19, 52
Pass 4:
27, 30
19, 30
Pass 5:
27, 29,
19, 29
Pass 6:
19, 27,
Pass 7:
(a) Com
N is
I is the
BUBBLE_SORT(A, N)
Step 1: Repeat Step 2 For 1 = to N-1
Step 2: Repeat For J = to N - I
Step 3: IF A[J] > A[J + 1]
SWAP A[J] and A[J+1]
[END OF INNER LOOP]
[END OF OUTER LOOP]
Step 4: EXIT
Figure 14.6
Searching and Sorting 437
Complexity of Bubble Sort
)
O(n )
n n
Programming ExamPlE
5. n
#include <stdio.h>
#include <conio.h>
int main()
{
{
{
{
{
1
Bubble Sort Optimization
438 Data Structures Using C
{
{
{
{
Complexity of Optimized Bubble Sort Algorithm
O(n)
O(n )
14.8 InSErtIon Sort
sor
Technique
∑
∑
∑ n LB =
∑ LB =
∑
Searching and Sorting 439
Example 14.3
Solution
9 39 45 63 18 81 1 8 54 72 3639 9 45 63 18 81 1 8 54 72 36
A[ ] is the only element in sorted list (Pass 1)
9 39 45 63 18 81 1 8 54 72 369 39 45 63 18 81 1 8 54 72 36
(Pass 2) (Pass 3)
9 18 39 45 63 81 1 8 54 72 369 18 39 45 63 81 1 8 54 72 36
(Pass 4) (Pass 5)
9 18 39 45 54 63 81 1 8 72 369 18 39 45 63 81 1 8 54 72 36
(Pass 6) (Pass 7)
9 18 36 39 45 54 63 72 81 1 89 18 39 45 54 63 72 81 1 8 36
(Pass 8) (Pass 9)
39 9 45 63 18 81 1 8 54 72 36
Sorted Unsorted
is th A[1]
A
A[1] A[1]
A[K] A[1] ...
A[K] A[J]
A[J] <= A[K] A[K] in its correct
... A[J] A[K] is
th
Kth
Jth
Complexity of Insertion Sort
O(n)
O(n )
INSERTION-SORT (ARR, N)
Step 1: Repeat Steps 2 to 5 for K = 1 to N – 1
Step 2: SET TEMP = ARR[K]
Step 3: SET J = K - 1
Step 4: Repeat while TEMP <= ARR[J]
SET ARR[J + 1] = ARR[J]
SET J = J - 1
[END OF INNER LOOP]
Step 5: SET ARR[J + 1] = TEMP
[END OF LOOP]
Step 6: EXIT
Figure 14.7
440 Data Structures Using C
Advantages of Insertion Sort
The advantages of this sorting algorithm are as follows:
∑
∑
∑
∑ i O(1)
∑ it is said t
Programming ExamPlE
6.
#include <stdio.h>
#include <conio.h>
void insertion_sort(int arr[], int n);
void main()
{
printf("n Enter the number of elements in the array: ");
scanf("%d", &n);
printf("n Enter the elements of the array: ");
for(i=0;i<n;i++)
{
scanf("%d", &arr[i]);
}
insertion_sort(arr, n);
printf("n The sorted array is: n");
for(i=0;i<n;i++)
printf(" %dt", arr[i]);
getch();
}
void insertion_sort(int arr[], int n)
{
int i, j, temp;
for(i=1;i<n;i++)
{
temp = arr[i];
j = i-1;
while((temp < arr[j]) && (j>=0))
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
Output
The sorted array is :
14.9 SELECTION SORT
gorit O(n )
Searching and Sorting 441
Technique
N
∑ POS
∑ POS
∑ POS
] so that ...
Example 14.4
PASS POS ARR[0] ARR[1] ARR[2] ARR[3] ARR[4] ARR[5] ARR[6] ARR[7]
1 1
Kth
POS ...
to
SELECTION SORT(ARR, N)
Step 1: Repeat Steps 2 and 3 for K = 1
to N-1
Step 2: CALL SMALLEST(ARR, K, N, POS)
Step 3: SWAP A[K] with ARR[POS]
[END OF LOOP]
Step 4: EXIT
SMALLEST (ARR, K, N, POS)
Step 1: [INITIALIZE] SET SMALL = ARR[K]
Step 2: [INITIALIZE] SET POS = K
Step 3: Repeat for J = K+1 to N
IF SMALL > ARR[J]
SET SMALL = ARR[J]
SET POS = J
[END OF IF]
[END OF LOOP]
Step 4: RETURN POS
-1
Figure 14.8
Complexity of Selection Sort
n
442 Data Structures Using C
thus, n–1
n – 1
(n – 1) + (n – 2) + ... + 2 + 1
= n(n – 1) / 2 = O(n2
) comparisons
Advantages of Selection Sort
∑
∑
∑
Programming ExamPlE
7.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int smallest(int arr[], int k, int n);
void selection_sort(int arr[], int n);
void main(int argc, char *argv[]) {
int arr[10], i, n;
printf("n Enter the number of elements in the array: ");
scanf("%d", &n);
printf("n Enter the elements of the array: ");
for(i=0;i<n;i++)
{
scanf("%d", &arr[i]);
}
selection_sort(arr, n);
printf("n The sorted array is: n");
for(i=0;i<n;i++)
printf(" %dt", arr[i]);
}
int smallest(int arr[], int k, int n)
{
int pos = k, small=arr[k], i;
for(i=k+1;i<n;i++)
{
if(arr[i]< small)
{
small = arr[i];
pos = i;
}
}
return pos;
}
void selection_sort(int arr[],int n)
{
int k, pos, temp;
for(k=0;k<n;k++)
{
pos = smallest(arr, k, n);
temp = arr[k];
Searching and Sorting 443
arr[k] = arr[pos];
arr[pos] = temp;
}
}
14.10 MERGE SORT
Divide n n/2
A
A A1
and A2
A
Conquer
Combine n/2 n
∑
∑
∑
∑
∑
∑
Example 14.5
Solution
39 9 45 1881 279 72
(Divide and Conquer the array)
39 9 45 1881 279 72
182790 72
18279 72
18279 72
39 9 4581
39 9 4581
39 9 4581
(Combine the elements to form a sorted array)
9 18 39 927 7245 81
92718 729 39 8145
72927 189 39 8145
18279 7239 9 4581
merge
9 39 45 81 18 27 72
BEG, I MID J END
9
INDEX
TEMP
9
444 Data Structures Using C
I or J
9 39 45 81 18 27 72
BEG MID J END INDEX
TEMP
I
9 189
9 39 45 81 18 27 72
BEG MID J INDEX
9
I
18 279
END
9 39 45 81 18 27 72
INDEX
9
BEG MID JI
18 27 399
END
9 39 45 81 18 27 72
INDEX
9
BEG MID JI
18 27 39 459
END
9 39 45 81 18 27 72
INDEX
9
BEG JI, MID
18 27 39 45 729
END
9 39 45 81 18 27 72
INDEX
9
BEG I, MID
18 27 39 45 72 819
J END
I is greater than
9 39 45 81 18 27 72
INDEX
9
BEG MID I
18 27 39 45 72 81 99
J END
MERGE (ARR, BEG, MID, END)
Step 1: [INITIALIZE] SET I = BEG, J = MID + 1, INDEX =
Step 2: Repeat while (I <= MID) AND (J<=END)
IF ARR[I] < ARR[J]
SET TEMP[INDEX] = ARR[I]
SET I = I + 1
ELSE
SET TEMP[INDEX] = ARR[J]
SET J = J + 1
[END OF IF]
SET INDEX = INDEX + 1
[END OF LOOP]
Step 3: [Copy the remaining elements of right sub-array, if any]
IF I > MID
Repeat while J <= END
SET TEMP[INDEX] = ARR[J]
SET INDEX = INDEX + 1, SET J = J + 1
[END OF LOOP]
[Copy the remaining elements of left sub-array, if any]
ELSE
Repeat while I <= MID
SET TEMP[INDEX] = ARR[I]
SET INDEX = INDEX + 1, SET I = I + 1
[END OF LOOP]
[END OF IF]
Step 4: [Copy the contents of TEMP back to ARR] SET K=
Step 5: Repeat while K < INDEX
SET ARR[K] = TEMP[K]
SET K = K + 1
[END OF LOOP]
Step 6: END
Searching and Sorting 445
Complexity of Merge Sort
The running time of merge sort in the average
case and the worst case can be given as O(n log
n). Although merge sort has an optimal time
complexity, it needs an additional space of O(n)
for the temporary array TEMP.
Programming ExamPlE
8. Write a program to implement merge sort.
#include <stdio.h>
#include <conio.h>
void merge(int a[], int, int, int);
void merge_sort(int a[],int, int);
void main()
{
printf("n Enter the number of elements in the array : ");
scanf("%d", &n);
printf("n Enter the elements of the array: ");
{
scanf("%d", &arr[i]);
}
printf("n The sorted array is: n");
printf(" %dt", arr[i]);
getch();
}
void merge(int arr[], int beg, int mid, int end)
{
while((i<=mid) && (j<=end))
{
if(arr[i] < arr[j])
{
}
else
{
}
}
if(i>mid)
{
while(j<=end)
{
MERGE_SORT(ARR, BEG, END)
Step 1: IF BEG < END
SET MID = (BEG + END)/2
CALL MERGE_SORT (ARR, BEG, MID)
CALL MERGE_SORT (ARR, MID + 1, END)
MERGE (ARR, BEG, MID, END)
[END OF IF]
Step 2: END
Figure 14.9 Algorithm for merge sort
446 Data Structures Using C
}
}
else
{
while(i<=mid)
{
}
}
}
void merge_sort(int arr[], int beg, int end)
{
int mid;
if(beg<end)
{
merge_sort(arr, beg, mid);
merge(arr, beg, mid, end);
}
}
14.11 QUICK SORT
Quick sort is a widely used sorting algorithm developed by C. A. R. Hoare that makes O(n log n)
comparisons in the average case to sort an array of n elements. However, in the worst case, it has
a quadratic running time given as O(n ). Basically, the quick sort algorithm is faster than other O(n
log n)
quadratic time. Quick sort is also known as partition exchange sort.
Like merge sort, this algorithm works by using a divide-and-conquer strategy to divide a single
unsorted array into two smaller sub-arrays.
The quick sort algorithm works as follows:
1. Select an element pivot from the array elements.
2. Rearrange the elements in the array in such a way that all elements that are less than the pivot
appear before the pivot and all elements greater than the pivot element come after it (equal
This is called the partition operation.
3. Recursively sort the two sub-arrays thus obtained. (One with sub-list of values smaller than
that of the pivot element and the other having higher value elements.)
Like merge sort, the base case
because in that case the array is already sorted. After each iteration, one element (pivot) is always
element in the array as pivot.)
Searching and Sorting 447
Technique
loc
right
loc = = right = n
loc
a[loc] a[right]
right loc
right = loc
a[loc] > a[right]
loc = right
loc
a[loc]
loc
= loc
a[loc] <
loc =
Example 14.6
27 1 36 18 25 45
27 1 36 18 25 45
loc
left
right
We choose the first element as the pivot.
Set , , and .loc = left = right = 5
27 1 36 18 25 45
loc
left
right
Scan from right to left. Since
, decrease the value of .
a[loc]
< a[right] right
25 1 36 18 27 45
left right
loc
Since , interchange
the two values and set .
a[loc] > a[right]
loc = right
25 1 36 18 27 45
left right
loc
Start scanning from left to right. Since a[loc]
> a[left], increment the value of .left
25 1 27 18 36 45
left
loc
right
Since , interchangea[loc] < a[left]
the values and set .loc = left
25 1 27 18 36 45
left
loc
right
Scan from right to left. Since
, decrement the value of .
a[loc]
< a[right] right
448 Data Structures Using C
25 1 18 27 36 45
left right
loc
Since , interchangea[loc] > a[right]
the two values and set .loc = right
25 1 18 27 36 45
right
loc
left
Start scanning from left to right. Since
, increment the value of .
a[loc]
> a[left] left
= loc
Partition
PARTITION (ARR, BEG, END, LOC)
Step 1: [INITIALIZE] SET LEFT = BEG, RIGHT = END, LOC = BEG, FLAG =
Step 2: Repeat Steps 3 to 6 while FLAG =
Step 3: Repeat while ARR[LOC] <= ARR[RIGHT] AND LOC != RIGHT
SET RIGHT = RIGHT - 1
[END OF LOOP]
Step 4: IF LOC = RIGHT
SET FLAG = 1
ELSE IF ARR[LOC] > ARR[RIGHT]
SWAP ARR[LOC] with ARR[RIGHT]
SET LOC = RIGHT
[END OF IF]
Step 5: IF FLAG =
Repeat while ARR[LOC] >= ARR[LEFT] AND LOC != LEFT
SET LEFT = LEFT + 1
[END OF LOOP]
Step 6: IF LOC = LEFT
SET FLAG = 1
ELSE IF ARR[LOC] < ARR[LEFT]
SWAP ARR[LOC] with ARR[LEFT]
SET LOC = LEFT
[END OF IF]
[END OF IF]
Step 7: [END OF LOOP]
Step 8: END
QUICK_SORT (ARR, BEG, END)
Step 1: IF (BEG < END)
CALL PARTITION (ARR, BEG, END, LOC)
CALL QUICKSORT(ARR, BEG, LOC - 1)
CALL QUICKSORT(ARR, LOC + 1, END)
[END OF IF]
Step 2: END
Figure 14.10
Searching and Sorting 449
Complexity of Quick Sort
In the average case, the running time of quick sort can be given as O(n log n). The partitioning of
the array which simply loops over the elements of the array once uses O(n) time.
In the best case, every time we partition the array, we divide the list into two nearly equal
pieces. That is, the recursive call processes the sub-array of half the size. At the most, only log n
nested calls can be made before we reach a sub-array of size 1. It means the depth of the call tree
is O(log n). And because at each level, there can only be O(n), the resultant time is given as O(n
log n) time.
O(n2
). The worst case occurs when the array is already sorted
(either in ascending or descending order) and the left-most element is chosen as the pivot.
However, many implementations randomly choose the pivot element. The randomized version
of the quick sort algorithm always has an algorithmic complexity of O(n log n).
Pros and Cons of Quick Sort
It is faster than other algorithms such as bubble sort, selection sort, and insertion sort. Quick sort
complex and massively recursive.
Programming ExamPlE
9. Write a program to implement quick sort algorithm.
#include <stdio.h>
#include <conio.h>
int partition(int a[], int beg, int end);
void quick_sort(int a[], int beg, int end);
void main()
{
printf("n Enter the number of elements in the array: ");
scanf("%d", &n);
printf("n Enter the elements of the array: ");
{
scanf("%d", &arr[i]);
}
printf("n The sorted array is: n");
printf(" %dt", arr[i]);
getch();
}
int partition(int a[], int beg, int end)
{
loc = left = beg;
right = end;
{
450 Data Structures Using C
if(loc==right)
else if(a[loc]>a[right])
{
temp = a[loc];
a[loc] = a[right];
a[right] = temp;
loc = right;
}
{
if(loc==left)
else if(a[loc] <a[left])
{
temp = a[loc];
a[loc] = a[left];
a[left] = temp;
loc = left;
}
}
}
return loc;
}
void quick_sort(int a[], int beg, int end)
{
int loc;
if(beg<end)
{
loc = partition(a, beg, end);
}
}
14.12 RADIX SORT
Radix sort is a linear sorting algorithm for integers and uses the concept of sorting names in
alphabetical order. When we have a list of sorted names, the radix is 26 (or 26 buckets) because
there are 26 letters in the English alphabet. So radix sort is also known as bucket sort. Observe
contains the names with B, and so on.
During the second pass, names are grouped according to the second letter. After the second
nth
pass, where n
is the length of the name with maximum number of letters.
from the second bucket, and so on.
When radix sort is used on integers, sorting is done on each of the digits in the number. The
sorting the numbers, we have ten buckets, each for one digit (0, 1, 2, …, 9) and the number of
passes will depend on the length of the number having maximum number of digts.
Searching and Sorting 451
Algorithm for RadixSort (ARR, N)
Step 1: Find the largest number in ARR as LARGE
Step 2: [INITIALIZE] SET NOP = Number of digits in LARGE
Step 3: SET PASS =
Step 4: Repeat Step 5 while PASS <= NOP-1
Step 5: SET I = and INITIALIZE buckets
Step 6: Repeat Steps 7 to 9 while I<N-1
Step 7: SET DIGIT = digit at PASSth place in A[I]
Step 8: Add A[I] to the bucket numbered DIGIT
Step 9: INCEREMENT bucket count for bucket numbered DIGIT
[END OF LOOP]
Step 1 : Collect the numbers in the bucket
[END OF LOOP]
Step 11: END
Figure 14.11
Example 14.7
Number 0 1 2 3 4 5 6 7 8 9
Number 0 1 2 3 4 5 6 7 8 9
452 Data Structures Using C
In the third pass, the numbers are sorted according to the digit at the hundreds place. The
buckets are pictured upside down.
Number 0 1 2 3 4 5 6 7 8 9
911 911
123 123
924 924
345 345
654 654
555 555
567 567
472 472
After the third pass, the list can be given as
123, 345, 472, 555, 567, 654, 808, 911, 924.
Complexity of Radix Sort
To calculate the complexity of radix sort algorithm, assume that there are n numbers that have to be
sorted and k is the number of digits in the largest number. In this case, the radix sort algorithm is
called a total of k times. The inner loop is executed n times. Hence, the entire radix sort algorithm
takes O(kn)
of numbers), then the algorithm runs in O(n) asymptotic time.
Pros and Cons of Radix Sort
Radix sort is a very simple algorithm. When programmed properly, radix sort is one of the fastest
sorting algorithms for numbers or strings of letters.
But there are certain trade-offs for radix sort that can make it less preferable as compared to
other sorting algorithms. Radix sort takes more space than other sorting algorithms. Besides the
array of numbers, we need 10 buckets to sort numbers, 26 buckets to sort strings containing only
characters, and at least 40 buckets to sort a string containing alphanumeric characters.
Another drawback of radix sort is that the algorithm is dependent on digits or letters. This
type, the algorithm has to be rewritten. Even if the sorting order changes, the algorithm has to
be rewritten. Thus, radix sort takes more time to write and writing a general purpose radix sort
algorithm that can handle all kinds of data is not a trivial task.
Radix sort is a good choice for many programs that need a fast sort, but there are faster sorting
algorithms available. This is the main reason why radix sort is not as widely used as other sorting
algorithms.
Programming ExamPlE
10. Write a program to implement radix sort algorithm.
##include <stdio.h>
#include <conio.h>
int largest(int arr[], int n);
void radix_sort(int arr[], int n);
void main()
Searching and Sorting 453
{
printf("n Enter the number of elements in the array: ");
scanf("%d", &n);
printf("n Enter the elements of the array: ");
{
scanf("%d", &arr[i]);
}
radix_sort(arr, n);
printf("n The sorted array is: n");
printf(" %dt", arr[i]);
getch();
}
int largest(int arr[], int n)
{
{
if(arr[i]>large)
large = arr[i];
}
return large;
}
void radix_sort(int arr[], int n)
{
large = largest(arr, n);
{
}
{
{
// sort the numbers according to the digit at passth place
bucket[remainder][bucket_count[remainder]] = arr[i];
}
// collect the numbers after PASS pass
{
{
arr[i] = bucket[k][j];
}
}
}
}
}
454 Data Structures Using C
14.13 HEAP Sort
H
H
O(n log n)
n
∑ H
∑
H
Complexity of Heap Sort
insertion root deletion
H H H
m m H
g(n) to insert n in H
g(n) <= n log n
O(n log n)
H m
L reheaping
L H H O(log m)
log m L in H
Since n H n
n
O(n log n)
O(n log n)
n O(n log n)
Programming ExamPlE
11.
#include <stdio.h>
#include <conio.h>
HEAPSORT(ARR, N)
Step 1: [Build Heap H]
Repeat for I = to N-1
CALL Insert_Heap(ARR, N, ARR[I])
[END OF LOOP]
Step 2: (Repeatedly delete the root element)
Repeat while N>
CALL Delete_Heap(ARR, N, VAL)
SET N = N + 1
[END OF LOOP]
Step 3: END
Figure 14.12
Searching and Sorting 455
int main()
{
{
{
{
{
{
while(j<=n)
{
456 Data Structures Using C
14.14 SHELL Sort
∑
∑
S
O(n )
n
Technique
∑ Step 1:
∑ Step 2:
Example 14.8
Solution
Result:
Result:
Searching and Sorting 457
Result:
Result:
Arr
Shell_Sort(Arr, n)
Step 1: SET FLAG = 1, GAP_SIZE = N
Step 2: Repeat Steps 3 to 6 while FLAG = 1 OR GAP_SIZE > 1
Step 3: SET FLAG =
Step 4: SET GAP_SIZE = (GAP_SIZE + 1) / 2
Step 5: Repeat Step 6 for I = to I < (N - GAP_SIZE)
Step 6: IF Arr[I + GAP_SIZE] > Arr[I]
SWAP Arr[I + GAP_SIZE], Arr[I]
SET FLAG =
Step 7: END
Figure 14.13
458 Data Structures Using C
Programming ExamPlE
12. Write a program to implement shell sort algorithm.
#include<stdio.h>
void main()
{
int arr[10]={-1};
{
{
{
}
}
}
}
}
14.15 TREE SORT
Atree sort is a sorting algorithm that sorts numbers by making use of the properties of binary search
binary search tree using the numbers
to be sorted and then does an in-order traversal so that the numbers are retrieved in a sorted order.
We will not discuss this topic in detail here because we assume that reader has already studied it
Complexity of Tree Sort Algorithm
Let us study the complexity of tree sort algorithm in all three cases.
Best Case Worst Case
O
n
O (n)
O (n) O
n O n )
O (n)
O n2
O n O n2
Searching and Sorting 459
Programming ExamPlE
13.
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
struct tree
{
{
{
{
else
{
else
{
{
460 Data Structures Using C
14.16 coMPArISon oF SortInG ALGorItHMS
14.17 EXtErnAL SortInG
Example 14.9
Step 1:
Step 2:
Step 3:
Step 4:
Step 5:
Disk
Input 1
Input 2
Input N
Output
Disk
I/O buffers in RAM
Figure 14.14
Generalized External Merge Sort Algorithm
K, then K
K K K
, K
table 14.1
Algorithm Average case Worst case
2
)
2
)
2
.k)
2
)
2
)
2
)
2
)
–
2
n)
Merge sort
Heap sort
Quick sort 2
)
Searching and Sorting 461
∑
∑
Applications of External Sorting
Projection Join
Points to rEmEmbEr
∑
∑
∑
∑
∑
∑
∑
∑
∑
∑
Divide
n
Conquer
Combine means
each
n
O(n log n)
∑
∑
∑
∑
∑

Más contenido relacionado

La actualidad más candente

Counting sort(Non Comparison Sort)
Counting sort(Non Comparison Sort)Counting sort(Non Comparison Sort)
Counting sort(Non Comparison Sort)Hossain Md Shakhawat
 
358 33 powerpoint-slides_14-sorting_chapter-14
358 33 powerpoint-slides_14-sorting_chapter-14358 33 powerpoint-slides_14-sorting_chapter-14
358 33 powerpoint-slides_14-sorting_chapter-14sumitbardhan
 
Chapter 11 - Sorting and Searching
Chapter 11 - Sorting and SearchingChapter 11 - Sorting and Searching
Chapter 11 - Sorting and SearchingEduardo Bergavera
 
sorting algorithm graphical method
sorting algorithm graphical method sorting algorithm graphical method
sorting algorithm graphical method Shantanu Mishra
 
Hub 102 - Lesson 5 - Algorithm: Sorting & Searching
Hub 102 - Lesson 5 - Algorithm: Sorting & SearchingHub 102 - Lesson 5 - Algorithm: Sorting & Searching
Hub 102 - Lesson 5 - Algorithm: Sorting & SearchingTiểu Hổ
 
SEARCHING AND SORTING ALGORITHMS
SEARCHING AND SORTING ALGORITHMSSEARCHING AND SORTING ALGORITHMS
SEARCHING AND SORTING ALGORITHMSGokul Hari
 
Data Structures- Part4 basic sorting algorithms
Data Structures- Part4 basic sorting algorithmsData Structures- Part4 basic sorting algorithms
Data Structures- Part4 basic sorting algorithmsAbdullah Al-hazmy
 
Sorting Algorithms
Sorting AlgorithmsSorting Algorithms
Sorting Algorithmsmultimedia9
 
Lect11 Sorting
Lect11 SortingLect11 Sorting
Lect11 Sortingryokollll
 
Introduction to Data Structures Sorting and searching
Introduction to Data Structures Sorting and searchingIntroduction to Data Structures Sorting and searching
Introduction to Data Structures Sorting and searchingMvenkatarao
 
Sorting Seminar Presentation by Ashin Guha Majumder
Sorting Seminar Presentation by Ashin Guha MajumderSorting Seminar Presentation by Ashin Guha Majumder
Sorting Seminar Presentation by Ashin Guha MajumderAshin Guha Majumder
 
Searching Sorting
Searching SortingSearching Sorting
Searching Sortingguest2cb109
 
Binary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of AlgorithmsBinary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of AlgorithmsDrishti Bhalla
 
Sorting Algorithms
Sorting AlgorithmsSorting Algorithms
Sorting AlgorithmsPranay Neema
 

La actualidad más candente (20)

Counting sort(Non Comparison Sort)
Counting sort(Non Comparison Sort)Counting sort(Non Comparison Sort)
Counting sort(Non Comparison Sort)
 
358 33 powerpoint-slides_14-sorting_chapter-14
358 33 powerpoint-slides_14-sorting_chapter-14358 33 powerpoint-slides_14-sorting_chapter-14
358 33 powerpoint-slides_14-sorting_chapter-14
 
Chapter 11 - Sorting and Searching
Chapter 11 - Sorting and SearchingChapter 11 - Sorting and Searching
Chapter 11 - Sorting and Searching
 
Insertion sort
Insertion sortInsertion sort
Insertion sort
 
sorting algorithm graphical method
sorting algorithm graphical method sorting algorithm graphical method
sorting algorithm graphical method
 
Hub 102 - Lesson 5 - Algorithm: Sorting & Searching
Hub 102 - Lesson 5 - Algorithm: Sorting & SearchingHub 102 - Lesson 5 - Algorithm: Sorting & Searching
Hub 102 - Lesson 5 - Algorithm: Sorting & Searching
 
Sorting
SortingSorting
Sorting
 
SEARCHING AND SORTING ALGORITHMS
SEARCHING AND SORTING ALGORITHMSSEARCHING AND SORTING ALGORITHMS
SEARCHING AND SORTING ALGORITHMS
 
Data Structures- Part4 basic sorting algorithms
Data Structures- Part4 basic sorting algorithmsData Structures- Part4 basic sorting algorithms
Data Structures- Part4 basic sorting algorithms
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Sorting Algorithms
Sorting AlgorithmsSorting Algorithms
Sorting Algorithms
 
Lect11 Sorting
Lect11 SortingLect11 Sorting
Lect11 Sorting
 
Introduction to Data Structures Sorting and searching
Introduction to Data Structures Sorting and searchingIntroduction to Data Structures Sorting and searching
Introduction to Data Structures Sorting and searching
 
Presentation
PresentationPresentation
Presentation
 
Sorting Seminar Presentation by Ashin Guha Majumder
Sorting Seminar Presentation by Ashin Guha MajumderSorting Seminar Presentation by Ashin Guha Majumder
Sorting Seminar Presentation by Ashin Guha Majumder
 
Searching Sorting
Searching SortingSearching Sorting
Searching Sorting
 
Binary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of AlgorithmsBinary Search - Design & Analysis of Algorithms
Binary Search - Design & Analysis of Algorithms
 
Insertion sort
Insertion sortInsertion sort
Insertion sort
 
Sorting Algorithms
Sorting AlgorithmsSorting Algorithms
Sorting Algorithms
 

Similar a Chapter 14 Searching and Sorting

chapter7.pptfuifbsdiufbsiudfiudfiufeiufiuf
chapter7.pptfuifbsdiufbsiudfiudfiufeiufiufchapter7.pptfuifbsdiufbsiudfiudfiufeiufiuf
chapter7.pptfuifbsdiufbsiudfiudfiufeiufiufWrushabhShirsat3
 
chapter7 Sorting.ppt
chapter7 Sorting.pptchapter7 Sorting.ppt
chapter7 Sorting.pptNielmagahod
 
ARRAY in python and c with examples .pptx
ARRAY  in python and c with examples .pptxARRAY  in python and c with examples .pptx
ARRAY in python and c with examples .pptxabhishekmaurya102515
 
14-sorting (3).ppt
14-sorting (3).ppt14-sorting (3).ppt
14-sorting (3).pptyasser3omr
 
Chapter 10.ppt
Chapter 10.pptChapter 10.ppt
Chapter 10.pptMithuBose3
 
9.Sorting & Searching
9.Sorting & Searching9.Sorting & Searching
9.Sorting & SearchingMandeep Singh
 
Lecture 02: Preliminaries of Data structure
Lecture 02: Preliminaries of Data structureLecture 02: Preliminaries of Data structure
Lecture 02: Preliminaries of Data structureNurjahan Nipa
 
searching in data structure.pptx
searching in data structure.pptxsearching in data structure.pptx
searching in data structure.pptxchouguleamruta24
 
UNIT I_PSPP - Illustrative Problems (1).pptx
UNIT I_PSPP - Illustrative Problems (1).pptxUNIT I_PSPP - Illustrative Problems (1).pptx
UNIT I_PSPP - Illustrative Problems (1).pptxRSathyaPriyaCSEKIOT
 
Array 31.8.2020 updated
Array 31.8.2020 updatedArray 31.8.2020 updated
Array 31.8.2020 updatedvrgokila
 
chapter1.ppt
chapter1.pptchapter1.ppt
chapter1.pptebinazer1
 
Algorithms lecture 3
Algorithms lecture 3Algorithms lecture 3
Algorithms lecture 3Mimi Haque
 
81818088 isc-class-xii-computer-science-project-java-programs
81818088 isc-class-xii-computer-science-project-java-programs81818088 isc-class-xii-computer-science-project-java-programs
81818088 isc-class-xii-computer-science-project-java-programsAbhishek Jena
 

Similar a Chapter 14 Searching and Sorting (20)

Unit 7 sorting
Unit 7   sortingUnit 7   sorting
Unit 7 sorting
 
sorting1.pptx
sorting1.pptxsorting1.pptx
sorting1.pptx
 
Unit6 C
Unit6 C Unit6 C
Unit6 C
 
chapter7.ppt
chapter7.pptchapter7.ppt
chapter7.ppt
 
chapter7.pptfuifbsdiufbsiudfiudfiufeiufiuf
chapter7.pptfuifbsdiufbsiudfiudfiufeiufiufchapter7.pptfuifbsdiufbsiudfiudfiufeiufiuf
chapter7.pptfuifbsdiufbsiudfiudfiufeiufiuf
 
chapter7 Sorting.ppt
chapter7 Sorting.pptchapter7 Sorting.ppt
chapter7 Sorting.ppt
 
ARRAY in python and c with examples .pptx
ARRAY  in python and c with examples .pptxARRAY  in python and c with examples .pptx
ARRAY in python and c with examples .pptx
 
14-sorting.ppt
14-sorting.ppt14-sorting.ppt
14-sorting.ppt
 
14-sorting (3).ppt
14-sorting (3).ppt14-sorting (3).ppt
14-sorting (3).ppt
 
14-sorting.ppt
14-sorting.ppt14-sorting.ppt
14-sorting.ppt
 
14-sorting.ppt
14-sorting.ppt14-sorting.ppt
14-sorting.ppt
 
Chapter 10.ppt
Chapter 10.pptChapter 10.ppt
Chapter 10.ppt
 
9.Sorting & Searching
9.Sorting & Searching9.Sorting & Searching
9.Sorting & Searching
 
Lecture 02: Preliminaries of Data structure
Lecture 02: Preliminaries of Data structureLecture 02: Preliminaries of Data structure
Lecture 02: Preliminaries of Data structure
 
searching in data structure.pptx
searching in data structure.pptxsearching in data structure.pptx
searching in data structure.pptx
 
UNIT I_PSPP - Illustrative Problems (1).pptx
UNIT I_PSPP - Illustrative Problems (1).pptxUNIT I_PSPP - Illustrative Problems (1).pptx
UNIT I_PSPP - Illustrative Problems (1).pptx
 
Array 31.8.2020 updated
Array 31.8.2020 updatedArray 31.8.2020 updated
Array 31.8.2020 updated
 
chapter1.ppt
chapter1.pptchapter1.ppt
chapter1.ppt
 
Algorithms lecture 3
Algorithms lecture 3Algorithms lecture 3
Algorithms lecture 3
 
81818088 isc-class-xii-computer-science-project-java-programs
81818088 isc-class-xii-computer-science-project-java-programs81818088 isc-class-xii-computer-science-project-java-programs
81818088 isc-class-xii-computer-science-project-java-programs
 

Más de MuhammadBakri13

Más de MuhammadBakri13 (12)

Uxd01 uxd fundamental
Uxd01 uxd fundamentalUxd01 uxd fundamental
Uxd01 uxd fundamental
 
Chapter 4 stack and queue
Chapter 4 stack and queueChapter 4 stack and queue
Chapter 4 stack and queue
 
Views in MySQL
Views in MySQLViews in MySQL
Views in MySQL
 
Slide 03: Data Management
Slide 03: Data ManagementSlide 03: Data Management
Slide 03: Data Management
 
Chapter 02 - Database Development
Chapter 02 - Database DevelopmentChapter 02 - Database Development
Chapter 02 - Database Development
 
Slide 01-Data and the Enterprise
Slide 01-Data and the EnterpriseSlide 01-Data and the Enterprise
Slide 01-Data and the Enterprise
 
Chapter 09-Trees
Chapter 09-TreesChapter 09-Trees
Chapter 09-Trees
 
Python Objects
Python ObjectsPython Objects
Python Objects
 
Looping
LoopingLooping
Looping
 
Conditional Statements
Conditional StatementsConditional Statements
Conditional Statements
 
Function
FunctionFunction
Function
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 

Último

SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...KokoStevan
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxnegromaestrong
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphThiyagu K
 
An Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdfAn Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdfSanaAli374401
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactPECB
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...christianmathematics
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.pptRamjanShidvankar
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxheathfieldcps1
 
PROCESS RECORDING FORMAT.docx
PROCESS      RECORDING        FORMAT.docxPROCESS      RECORDING        FORMAT.docx
PROCESS RECORDING FORMAT.docxPoojaSen20
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfagholdier
 
Gardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch LetterGardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch LetterMateoGardella
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxVishalSingh1417
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Celine George
 

Último (20)

SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptx
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot Graph
 
An Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdfAn Overview of Mutual Funds Bcom Project.pdf
An Overview of Mutual Funds Bcom Project.pdf
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
 
PROCESS RECORDING FORMAT.docx
PROCESS      RECORDING        FORMAT.docxPROCESS      RECORDING        FORMAT.docx
PROCESS RECORDING FORMAT.docx
 
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
Gardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch LetterGardella_PRCampaignConclusion Pitch Letter
Gardella_PRCampaignConclusion Pitch Letter
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 

Chapter 14 Searching and Sorting

  • 1. 14.1 IntroductIon to SEArcHInG linear search binary search 14.2 LInEAr SEArcH sequential search A[] LEArnInG objEctIvE Searching and sorting are two of the most common operations in computer science. Searching and Sorting chapter 14
  • 2. Searching and Sorting 425 and the value to be searched is VAL = 7, then searching means POS = 3 of POS and I while be executed till I is less than N (total number of elements VAL the value of I VAL VAL and no match is found, then it means that VAL is not Complexity of Linear Search Algorithm Linear search executes in O(n) n VAL VAL is not n Programming ExamPlE 1. #include <stdio.h> #include <stdlib.h> #include <conio.h> } } } LINEAR_SEARCH(A, N, VAL) Step 1: [INITIALIZE] SET POS = -1 Step 2: [INITIALIZE] SET I = 1 Step 3: Repeat Step 4 while I<=N Step 4: IF A[I] = VAL SET POS = I PRINT POS Go to Step 6 [END OF IF] [END OF LOOP] Step 6: EXIT SET I = I + 1 Step 5: IF POS = –1 PRINT VALUE IS NOT PRESENT IN THE ARRAY [END OF IF] " " Figure 14.1 Algorithm for linear search
  • 3. 426 Data Structures Using C } 14.3 Binary Search and the value to be searched is and is less than VAL and is less than VAL and and and is calculated as and POS VAL is not equal to , then the values of , , and VAL is smaller or greater than (a) If , then VAL (b) If , then VAL VAL , , and POS while executed until is less than or equal to is equal to VAL
  • 4. Searching and Sorting 427 found, then the value of POS is not found, and if the value of is greater than VAL, the value of is is greater than VAL, then the value of , then VAL is Complexity of Binary Search Algorithm , n is the number of elements in the n) n Programming ExamPlE 2. ##include <stdio.h> #include <stdlib.h> #include <conio.h> } } BINARY_SEARCH(A, lower_bound, upper_bound, VAL) Step 1: [INITIALIZE] SET BEG = lower_bound END = upper_bound, POS = - 1 Step 2: Repeat Steps 3 and 4 while BEG <= END Step 3: SET MID = (BEG + END)/2 Step 4: IF A[MID] = VAL SET POS = MID PRINT POS Go to Step 6 ELSE IF A[MID] > VAL SET END = MID - 1 ELSE SET BEG = MID + 1 [END OF IF] [END OF LOOP] Step 5: IF POS = -1 PRINT “VALUE IS NOT PRESENT IN THE ARRAY” [END OF IF] Step 6: EXIT Figure 14.2 Algorithm for binary search
  • 5. 428 Data Structures Using C else } } } } } } } 14.4 inTerPOLaTiOn Search calculation is done based on the values INTERPOLATION_SEARCH (A, lower_bound, upper_bound, VAL) Figure 14.3 Algorithm for interpolation search
  • 6. Searching and Sorting 429 VAL Low Item to be searched High Middle = (low+ high)/2 (a) Binary search divides the list into two equal halves VAL Low Item to be searched High Middle = low + (high - low) ( (key – a[low]) /(a[high] – a[low]))¥ (b) Interpolation search divides the list into two equal halves Figure 14.4 Difference between binary search and interpolation search Complexity of Interpolation Search Algorithm When n O(n) example 14.1 Given a list of numbers . Search Solution Programming ExamPlE 3. #include <stdio.h> #include <conio.h>
  • 7. 430 Data Structures Using C else } } else } 14.5 JUMP Search 3 7 3 7 3 7
  • 8. Searching and Sorting 431 JUMP_SEARCH (A, lower_bound, upper_bound, VAL, N) POS = I Figure 14.5 Advantage of Jump Search over Linear Search Advantage of Jump Search over Binary Search O(log n) How to Choose the Step Length? n n Further Optimization of Jump Search
  • 9. 432 Data Structures Using C Searching can start from somewhere middle in the list rather than from the beginning to optimize performance. n = Complexity of Jump Search Algorithm n O Programming ExamPlE 4. #include <stdio.h> #include <math.h> #include <conio.h> { { else { int main() {
  • 10. Searching and Sorting 433 else Fibonacci Search O(log n). 14.6 IntroductIon to SortInG A A are < A[1] < < ...... < A[N] ∑ Internal sorting ∑ External sorting 14.6.1 Sorting on Multiple Keys ∑
  • 11. 434 Data Structures Using C ∑ ∑ note sort key. A primary sort key the second is known as the secondary sort key name department Salary Phone number Janak 1000000 9812345678 Computer Science 890000 9910023456 900000 7838987654 Huma 1100000 9654123456 Computer Science 750000 9350123455 name department Salary Phone number Computer Science 750000 9350123455 Computer Science 890000 9910023456 900000 7838987654 Huma 1100000 9654123456 Janak 1000000 9812345678 14.6.2 Practical considerations for Internal Sorting ∑ ∑ ∑ ∑ ∑ ∑ 14.7 bubbLE Sort
  • 12. Searching and Sorting 435 bubble sorting note Technique A[1] A[1] A[1] A[1] A[1] A[1] A[1] Example 14.2 A[] Pass 1: 29, 52 63, 87 27, 87 19 87 54, 87 Pass 2: 29, 30 27, 63
  • 13. 436 Data Structures Using C 19, 63 54, 63 Pass 3: 27, 52 , 19, 52 Pass 4: 27, 30 19, 30 Pass 5: 27, 29, 19, 29 Pass 6: 19, 27, Pass 7: (a) Com N is I is the BUBBLE_SORT(A, N) Step 1: Repeat Step 2 For 1 = to N-1 Step 2: Repeat For J = to N - I Step 3: IF A[J] > A[J + 1] SWAP A[J] and A[J+1] [END OF INNER LOOP] [END OF OUTER LOOP] Step 4: EXIT Figure 14.6
  • 14. Searching and Sorting 437 Complexity of Bubble Sort ) O(n ) n n Programming ExamPlE 5. n #include <stdio.h> #include <conio.h> int main() { { { { { 1 Bubble Sort Optimization
  • 15. 438 Data Structures Using C { { { { Complexity of Optimized Bubble Sort Algorithm O(n) O(n ) 14.8 InSErtIon Sort sor Technique ∑ ∑ ∑ n LB = ∑ LB = ∑
  • 16. Searching and Sorting 439 Example 14.3 Solution 9 39 45 63 18 81 1 8 54 72 3639 9 45 63 18 81 1 8 54 72 36 A[ ] is the only element in sorted list (Pass 1) 9 39 45 63 18 81 1 8 54 72 369 39 45 63 18 81 1 8 54 72 36 (Pass 2) (Pass 3) 9 18 39 45 63 81 1 8 54 72 369 18 39 45 63 81 1 8 54 72 36 (Pass 4) (Pass 5) 9 18 39 45 54 63 81 1 8 72 369 18 39 45 63 81 1 8 54 72 36 (Pass 6) (Pass 7) 9 18 36 39 45 54 63 72 81 1 89 18 39 45 54 63 72 81 1 8 36 (Pass 8) (Pass 9) 39 9 45 63 18 81 1 8 54 72 36 Sorted Unsorted is th A[1] A A[1] A[1] A[K] A[1] ... A[K] A[J] A[J] <= A[K] A[K] in its correct ... A[J] A[K] is th Kth Jth Complexity of Insertion Sort O(n) O(n ) INSERTION-SORT (ARR, N) Step 1: Repeat Steps 2 to 5 for K = 1 to N – 1 Step 2: SET TEMP = ARR[K] Step 3: SET J = K - 1 Step 4: Repeat while TEMP <= ARR[J] SET ARR[J + 1] = ARR[J] SET J = J - 1 [END OF INNER LOOP] Step 5: SET ARR[J + 1] = TEMP [END OF LOOP] Step 6: EXIT Figure 14.7
  • 17. 440 Data Structures Using C Advantages of Insertion Sort The advantages of this sorting algorithm are as follows: ∑ ∑ ∑ ∑ i O(1) ∑ it is said t Programming ExamPlE 6. #include <stdio.h> #include <conio.h> void insertion_sort(int arr[], int n); void main() { printf("n Enter the number of elements in the array: "); scanf("%d", &n); printf("n Enter the elements of the array: "); for(i=0;i<n;i++) { scanf("%d", &arr[i]); } insertion_sort(arr, n); printf("n The sorted array is: n"); for(i=0;i<n;i++) printf(" %dt", arr[i]); getch(); } void insertion_sort(int arr[], int n) { int i, j, temp; for(i=1;i<n;i++) { temp = arr[i]; j = i-1; while((temp < arr[j]) && (j>=0)) { arr[j+1] = arr[j]; j--; } arr[j+1] = temp; } } Output The sorted array is : 14.9 SELECTION SORT gorit O(n )
  • 18. Searching and Sorting 441 Technique N ∑ POS ∑ POS ∑ POS ] so that ... Example 14.4 PASS POS ARR[0] ARR[1] ARR[2] ARR[3] ARR[4] ARR[5] ARR[6] ARR[7] 1 1 Kth POS ... to SELECTION SORT(ARR, N) Step 1: Repeat Steps 2 and 3 for K = 1 to N-1 Step 2: CALL SMALLEST(ARR, K, N, POS) Step 3: SWAP A[K] with ARR[POS] [END OF LOOP] Step 4: EXIT SMALLEST (ARR, K, N, POS) Step 1: [INITIALIZE] SET SMALL = ARR[K] Step 2: [INITIALIZE] SET POS = K Step 3: Repeat for J = K+1 to N IF SMALL > ARR[J] SET SMALL = ARR[J] SET POS = J [END OF IF] [END OF LOOP] Step 4: RETURN POS -1 Figure 14.8 Complexity of Selection Sort n
  • 19. 442 Data Structures Using C thus, n–1 n – 1 (n – 1) + (n – 2) + ... + 2 + 1 = n(n – 1) / 2 = O(n2 ) comparisons Advantages of Selection Sort ∑ ∑ ∑ Programming ExamPlE 7. #include <stdio.h> #include <stdlib.h> #include <conio.h> int smallest(int arr[], int k, int n); void selection_sort(int arr[], int n); void main(int argc, char *argv[]) { int arr[10], i, n; printf("n Enter the number of elements in the array: "); scanf("%d", &n); printf("n Enter the elements of the array: "); for(i=0;i<n;i++) { scanf("%d", &arr[i]); } selection_sort(arr, n); printf("n The sorted array is: n"); for(i=0;i<n;i++) printf(" %dt", arr[i]); } int smallest(int arr[], int k, int n) { int pos = k, small=arr[k], i; for(i=k+1;i<n;i++) { if(arr[i]< small) { small = arr[i]; pos = i; } } return pos; } void selection_sort(int arr[],int n) { int k, pos, temp; for(k=0;k<n;k++) { pos = smallest(arr, k, n); temp = arr[k];
  • 20. Searching and Sorting 443 arr[k] = arr[pos]; arr[pos] = temp; } } 14.10 MERGE SORT Divide n n/2 A A A1 and A2 A Conquer Combine n/2 n ∑ ∑ ∑ ∑ ∑ ∑ Example 14.5 Solution 39 9 45 1881 279 72 (Divide and Conquer the array) 39 9 45 1881 279 72 182790 72 18279 72 18279 72 39 9 4581 39 9 4581 39 9 4581 (Combine the elements to form a sorted array) 9 18 39 927 7245 81 92718 729 39 8145 72927 189 39 8145 18279 7239 9 4581 merge 9 39 45 81 18 27 72 BEG, I MID J END 9 INDEX TEMP 9
  • 21. 444 Data Structures Using C I or J 9 39 45 81 18 27 72 BEG MID J END INDEX TEMP I 9 189 9 39 45 81 18 27 72 BEG MID J INDEX 9 I 18 279 END 9 39 45 81 18 27 72 INDEX 9 BEG MID JI 18 27 399 END 9 39 45 81 18 27 72 INDEX 9 BEG MID JI 18 27 39 459 END 9 39 45 81 18 27 72 INDEX 9 BEG JI, MID 18 27 39 45 729 END 9 39 45 81 18 27 72 INDEX 9 BEG I, MID 18 27 39 45 72 819 J END I is greater than 9 39 45 81 18 27 72 INDEX 9 BEG MID I 18 27 39 45 72 81 99 J END MERGE (ARR, BEG, MID, END) Step 1: [INITIALIZE] SET I = BEG, J = MID + 1, INDEX = Step 2: Repeat while (I <= MID) AND (J<=END) IF ARR[I] < ARR[J] SET TEMP[INDEX] = ARR[I] SET I = I + 1 ELSE SET TEMP[INDEX] = ARR[J] SET J = J + 1 [END OF IF] SET INDEX = INDEX + 1 [END OF LOOP] Step 3: [Copy the remaining elements of right sub-array, if any] IF I > MID Repeat while J <= END SET TEMP[INDEX] = ARR[J] SET INDEX = INDEX + 1, SET J = J + 1 [END OF LOOP] [Copy the remaining elements of left sub-array, if any] ELSE Repeat while I <= MID SET TEMP[INDEX] = ARR[I] SET INDEX = INDEX + 1, SET I = I + 1 [END OF LOOP] [END OF IF] Step 4: [Copy the contents of TEMP back to ARR] SET K= Step 5: Repeat while K < INDEX SET ARR[K] = TEMP[K] SET K = K + 1 [END OF LOOP] Step 6: END
  • 22. Searching and Sorting 445 Complexity of Merge Sort The running time of merge sort in the average case and the worst case can be given as O(n log n). Although merge sort has an optimal time complexity, it needs an additional space of O(n) for the temporary array TEMP. Programming ExamPlE 8. Write a program to implement merge sort. #include <stdio.h> #include <conio.h> void merge(int a[], int, int, int); void merge_sort(int a[],int, int); void main() { printf("n Enter the number of elements in the array : "); scanf("%d", &n); printf("n Enter the elements of the array: "); { scanf("%d", &arr[i]); } printf("n The sorted array is: n"); printf(" %dt", arr[i]); getch(); } void merge(int arr[], int beg, int mid, int end) { while((i<=mid) && (j<=end)) { if(arr[i] < arr[j]) { } else { } } if(i>mid) { while(j<=end) { MERGE_SORT(ARR, BEG, END) Step 1: IF BEG < END SET MID = (BEG + END)/2 CALL MERGE_SORT (ARR, BEG, MID) CALL MERGE_SORT (ARR, MID + 1, END) MERGE (ARR, BEG, MID, END) [END OF IF] Step 2: END Figure 14.9 Algorithm for merge sort
  • 23. 446 Data Structures Using C } } else { while(i<=mid) { } } } void merge_sort(int arr[], int beg, int end) { int mid; if(beg<end) { merge_sort(arr, beg, mid); merge(arr, beg, mid, end); } } 14.11 QUICK SORT Quick sort is a widely used sorting algorithm developed by C. A. R. Hoare that makes O(n log n) comparisons in the average case to sort an array of n elements. However, in the worst case, it has a quadratic running time given as O(n ). Basically, the quick sort algorithm is faster than other O(n log n) quadratic time. Quick sort is also known as partition exchange sort. Like merge sort, this algorithm works by using a divide-and-conquer strategy to divide a single unsorted array into two smaller sub-arrays. The quick sort algorithm works as follows: 1. Select an element pivot from the array elements. 2. Rearrange the elements in the array in such a way that all elements that are less than the pivot appear before the pivot and all elements greater than the pivot element come after it (equal This is called the partition operation. 3. Recursively sort the two sub-arrays thus obtained. (One with sub-list of values smaller than that of the pivot element and the other having higher value elements.) Like merge sort, the base case because in that case the array is already sorted. After each iteration, one element (pivot) is always element in the array as pivot.)
  • 24. Searching and Sorting 447 Technique loc right loc = = right = n loc a[loc] a[right] right loc right = loc a[loc] > a[right] loc = right loc a[loc] loc = loc a[loc] < loc = Example 14.6 27 1 36 18 25 45 27 1 36 18 25 45 loc left right We choose the first element as the pivot. Set , , and .loc = left = right = 5 27 1 36 18 25 45 loc left right Scan from right to left. Since , decrease the value of . a[loc] < a[right] right 25 1 36 18 27 45 left right loc Since , interchange the two values and set . a[loc] > a[right] loc = right 25 1 36 18 27 45 left right loc Start scanning from left to right. Since a[loc] > a[left], increment the value of .left 25 1 27 18 36 45 left loc right Since , interchangea[loc] < a[left] the values and set .loc = left 25 1 27 18 36 45 left loc right Scan from right to left. Since , decrement the value of . a[loc] < a[right] right
  • 25. 448 Data Structures Using C 25 1 18 27 36 45 left right loc Since , interchangea[loc] > a[right] the two values and set .loc = right 25 1 18 27 36 45 right loc left Start scanning from left to right. Since , increment the value of . a[loc] > a[left] left = loc Partition PARTITION (ARR, BEG, END, LOC) Step 1: [INITIALIZE] SET LEFT = BEG, RIGHT = END, LOC = BEG, FLAG = Step 2: Repeat Steps 3 to 6 while FLAG = Step 3: Repeat while ARR[LOC] <= ARR[RIGHT] AND LOC != RIGHT SET RIGHT = RIGHT - 1 [END OF LOOP] Step 4: IF LOC = RIGHT SET FLAG = 1 ELSE IF ARR[LOC] > ARR[RIGHT] SWAP ARR[LOC] with ARR[RIGHT] SET LOC = RIGHT [END OF IF] Step 5: IF FLAG = Repeat while ARR[LOC] >= ARR[LEFT] AND LOC != LEFT SET LEFT = LEFT + 1 [END OF LOOP] Step 6: IF LOC = LEFT SET FLAG = 1 ELSE IF ARR[LOC] < ARR[LEFT] SWAP ARR[LOC] with ARR[LEFT] SET LOC = LEFT [END OF IF] [END OF IF] Step 7: [END OF LOOP] Step 8: END QUICK_SORT (ARR, BEG, END) Step 1: IF (BEG < END) CALL PARTITION (ARR, BEG, END, LOC) CALL QUICKSORT(ARR, BEG, LOC - 1) CALL QUICKSORT(ARR, LOC + 1, END) [END OF IF] Step 2: END Figure 14.10
  • 26. Searching and Sorting 449 Complexity of Quick Sort In the average case, the running time of quick sort can be given as O(n log n). The partitioning of the array which simply loops over the elements of the array once uses O(n) time. In the best case, every time we partition the array, we divide the list into two nearly equal pieces. That is, the recursive call processes the sub-array of half the size. At the most, only log n nested calls can be made before we reach a sub-array of size 1. It means the depth of the call tree is O(log n). And because at each level, there can only be O(n), the resultant time is given as O(n log n) time. O(n2 ). The worst case occurs when the array is already sorted (either in ascending or descending order) and the left-most element is chosen as the pivot. However, many implementations randomly choose the pivot element. The randomized version of the quick sort algorithm always has an algorithmic complexity of O(n log n). Pros and Cons of Quick Sort It is faster than other algorithms such as bubble sort, selection sort, and insertion sort. Quick sort complex and massively recursive. Programming ExamPlE 9. Write a program to implement quick sort algorithm. #include <stdio.h> #include <conio.h> int partition(int a[], int beg, int end); void quick_sort(int a[], int beg, int end); void main() { printf("n Enter the number of elements in the array: "); scanf("%d", &n); printf("n Enter the elements of the array: "); { scanf("%d", &arr[i]); } printf("n The sorted array is: n"); printf(" %dt", arr[i]); getch(); } int partition(int a[], int beg, int end) { loc = left = beg; right = end; {
  • 27. 450 Data Structures Using C if(loc==right) else if(a[loc]>a[right]) { temp = a[loc]; a[loc] = a[right]; a[right] = temp; loc = right; } { if(loc==left) else if(a[loc] <a[left]) { temp = a[loc]; a[loc] = a[left]; a[left] = temp; loc = left; } } } return loc; } void quick_sort(int a[], int beg, int end) { int loc; if(beg<end) { loc = partition(a, beg, end); } } 14.12 RADIX SORT Radix sort is a linear sorting algorithm for integers and uses the concept of sorting names in alphabetical order. When we have a list of sorted names, the radix is 26 (or 26 buckets) because there are 26 letters in the English alphabet. So radix sort is also known as bucket sort. Observe contains the names with B, and so on. During the second pass, names are grouped according to the second letter. After the second nth pass, where n is the length of the name with maximum number of letters. from the second bucket, and so on. When radix sort is used on integers, sorting is done on each of the digits in the number. The sorting the numbers, we have ten buckets, each for one digit (0, 1, 2, …, 9) and the number of passes will depend on the length of the number having maximum number of digts.
  • 28. Searching and Sorting 451 Algorithm for RadixSort (ARR, N) Step 1: Find the largest number in ARR as LARGE Step 2: [INITIALIZE] SET NOP = Number of digits in LARGE Step 3: SET PASS = Step 4: Repeat Step 5 while PASS <= NOP-1 Step 5: SET I = and INITIALIZE buckets Step 6: Repeat Steps 7 to 9 while I<N-1 Step 7: SET DIGIT = digit at PASSth place in A[I] Step 8: Add A[I] to the bucket numbered DIGIT Step 9: INCEREMENT bucket count for bucket numbered DIGIT [END OF LOOP] Step 1 : Collect the numbers in the bucket [END OF LOOP] Step 11: END Figure 14.11 Example 14.7 Number 0 1 2 3 4 5 6 7 8 9 Number 0 1 2 3 4 5 6 7 8 9
  • 29. 452 Data Structures Using C In the third pass, the numbers are sorted according to the digit at the hundreds place. The buckets are pictured upside down. Number 0 1 2 3 4 5 6 7 8 9 911 911 123 123 924 924 345 345 654 654 555 555 567 567 472 472 After the third pass, the list can be given as 123, 345, 472, 555, 567, 654, 808, 911, 924. Complexity of Radix Sort To calculate the complexity of radix sort algorithm, assume that there are n numbers that have to be sorted and k is the number of digits in the largest number. In this case, the radix sort algorithm is called a total of k times. The inner loop is executed n times. Hence, the entire radix sort algorithm takes O(kn) of numbers), then the algorithm runs in O(n) asymptotic time. Pros and Cons of Radix Sort Radix sort is a very simple algorithm. When programmed properly, radix sort is one of the fastest sorting algorithms for numbers or strings of letters. But there are certain trade-offs for radix sort that can make it less preferable as compared to other sorting algorithms. Radix sort takes more space than other sorting algorithms. Besides the array of numbers, we need 10 buckets to sort numbers, 26 buckets to sort strings containing only characters, and at least 40 buckets to sort a string containing alphanumeric characters. Another drawback of radix sort is that the algorithm is dependent on digits or letters. This type, the algorithm has to be rewritten. Even if the sorting order changes, the algorithm has to be rewritten. Thus, radix sort takes more time to write and writing a general purpose radix sort algorithm that can handle all kinds of data is not a trivial task. Radix sort is a good choice for many programs that need a fast sort, but there are faster sorting algorithms available. This is the main reason why radix sort is not as widely used as other sorting algorithms. Programming ExamPlE 10. Write a program to implement radix sort algorithm. ##include <stdio.h> #include <conio.h> int largest(int arr[], int n); void radix_sort(int arr[], int n); void main()
  • 30. Searching and Sorting 453 { printf("n Enter the number of elements in the array: "); scanf("%d", &n); printf("n Enter the elements of the array: "); { scanf("%d", &arr[i]); } radix_sort(arr, n); printf("n The sorted array is: n"); printf(" %dt", arr[i]); getch(); } int largest(int arr[], int n) { { if(arr[i]>large) large = arr[i]; } return large; } void radix_sort(int arr[], int n) { large = largest(arr, n); { } { { // sort the numbers according to the digit at passth place bucket[remainder][bucket_count[remainder]] = arr[i]; } // collect the numbers after PASS pass { { arr[i] = bucket[k][j]; } } } } }
  • 31. 454 Data Structures Using C 14.13 HEAP Sort H H O(n log n) n ∑ H ∑ H Complexity of Heap Sort insertion root deletion H H H m m H g(n) to insert n in H g(n) <= n log n O(n log n) H m L reheaping L H H O(log m) log m L in H Since n H n n O(n log n) O(n log n) n O(n log n) Programming ExamPlE 11. #include <stdio.h> #include <conio.h> HEAPSORT(ARR, N) Step 1: [Build Heap H] Repeat for I = to N-1 CALL Insert_Heap(ARR, N, ARR[I]) [END OF LOOP] Step 2: (Repeatedly delete the root element) Repeat while N> CALL Delete_Heap(ARR, N, VAL) SET N = N + 1 [END OF LOOP] Step 3: END Figure 14.12
  • 32. Searching and Sorting 455 int main() { { { { { { while(j<=n) {
  • 33. 456 Data Structures Using C 14.14 SHELL Sort ∑ ∑ S O(n ) n Technique ∑ Step 1: ∑ Step 2: Example 14.8 Solution Result: Result:
  • 34. Searching and Sorting 457 Result: Result: Arr Shell_Sort(Arr, n) Step 1: SET FLAG = 1, GAP_SIZE = N Step 2: Repeat Steps 3 to 6 while FLAG = 1 OR GAP_SIZE > 1 Step 3: SET FLAG = Step 4: SET GAP_SIZE = (GAP_SIZE + 1) / 2 Step 5: Repeat Step 6 for I = to I < (N - GAP_SIZE) Step 6: IF Arr[I + GAP_SIZE] > Arr[I] SWAP Arr[I + GAP_SIZE], Arr[I] SET FLAG = Step 7: END Figure 14.13
  • 35. 458 Data Structures Using C Programming ExamPlE 12. Write a program to implement shell sort algorithm. #include<stdio.h> void main() { int arr[10]={-1}; { { { } } } } } 14.15 TREE SORT Atree sort is a sorting algorithm that sorts numbers by making use of the properties of binary search binary search tree using the numbers to be sorted and then does an in-order traversal so that the numbers are retrieved in a sorted order. We will not discuss this topic in detail here because we assume that reader has already studied it Complexity of Tree Sort Algorithm Let us study the complexity of tree sort algorithm in all three cases. Best Case Worst Case O n O (n) O (n) O n O n ) O (n) O n2 O n O n2
  • 36. Searching and Sorting 459 Programming ExamPlE 13. #include <stdio.h> #include <conio.h> #include <alloc.h> struct tree { { { { else { else { {
  • 37. 460 Data Structures Using C 14.16 coMPArISon oF SortInG ALGorItHMS 14.17 EXtErnAL SortInG Example 14.9 Step 1: Step 2: Step 3: Step 4: Step 5: Disk Input 1 Input 2 Input N Output Disk I/O buffers in RAM Figure 14.14 Generalized External Merge Sort Algorithm K, then K K K K , K table 14.1 Algorithm Average case Worst case 2 ) 2 ) 2 .k) 2 ) 2 ) 2 ) 2 ) – 2 n) Merge sort Heap sort Quick sort 2 )
  • 38. Searching and Sorting 461 ∑ ∑ Applications of External Sorting Projection Join Points to rEmEmbEr ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ ∑ Divide n Conquer Combine means each n O(n log n) ∑ ∑ ∑ ∑ ∑