57
CS11001/CS11002 Programming and Data Structures (PDS) (Theory: 3-0-0) Teacher: Sourangshu Bha@acharya [email protected] h@p://cse.iitkgp.ac.in/~sourangshu/ Department of Computer Science and Engineering Indian InsJtute of Technology Kharagpur

CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

  • Upload
    others

  • View
    17

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

CS11001/CS11002ProgrammingandDataStructures

(PDS)(Theory:3-0-0)

Teacher:SourangshuBha@[email protected]

h@p://cse.iitkgp.ac.in/~sourangshu/

DepartmentofComputerScienceandEngineeringIndianInsJtuteofTechnologyKharagpur

Page 2: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

SorJng:thebasicproblem

•  Givenanarrayx[0], x[1], ... , x[size-1] reorderentriessothat

x[0] <= x[1] <= . . . <= x[size-1]

List is in non-decreasing order.

•  Wecanalsosortalistofelementsinnon-increasingorder.

Page 3: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

SorJngProblem•  Whatwewant:Datasortedinorder•  Input:Alistofelements•  Output:Alistofelementsinsorted(non-increasing/non-

decreasing)orderUnsorted list x:

0 size-1

Sorted list

•  Originallist:–  10,30,20,80,70,10,60,40,70

•  Sortedinnon-decreasingorder:–  10,10,20,30,40,60,70,70,80

•  Sortedinnon-increasingorder:–  80,70,70,60,40,30,20,10,10

Page 4: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Example

-7 12 -5 6 72 21 3 45 x:

3 12 -5 6 72 21 -7 45 x:

-7 -5 12 6 72 21 3 45 x:

-7 -5 3 6 72 21 12 45 x:

-7 -5 3 6 72 21 12 45 x:

-7 -5 3 6 12 21 72 45 x:

-7 -5 3 6 12 21 45 72 x:

-7 -5 3 6 12 21 72 45 x:

Swap

Swap

Swap

Page 5: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

SelecJonSort

•  GeneralsituaLon:

remainder, unsorted smallest elements, sorted

0 size-1 k

•  Steps: •  Find smallest element, mval, in x[k+1..size-1] •  Swap smallest element with x[k-1], •  Increase k.

x:

0 k size-1 mval

swap

Page 6: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Subproblem:Findsmallestelement/* Yield location of smallest element in x[k ..

size-1] and store in pos*/ int j, pos; pos = k; /* assume first element is the smallest element */ for (j=k+1; j<size; j++) { if (x[j] < x[pos]) { /* x[pos] is the smallest element as of now */

pos = j; }

} printf(“%d”,pos);

Page 7: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Subproblem:Swapwithsmallestelement/* Yield location of smallest element in x[k .. size-1] and

store in pos*/ int j, pos; pos = k; /* assume first element is the smallest

element */ for (j=k+1; j<size; j++) { if (x[j] < x[pos]) { /* x[pos] is the smallest element as of now */

pos = j; }

} printf(“%d”,pos); if (x[pos] < x[k]) { temp = x[k]; /* swap content of x[k] and x[pos] */ x[k] = x[pos]; x[pos] = temp;

}

Page 8: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

#include <stdio.h> /* Sort x[0..size-1] in non-decreasing order */ int main() { int k,j,pos,x[100],size,temp printf("Enter the number of elements: "); scanf("%d",&size); printf("Enter the elements: "); for(k=0;k<size;k++) scanf("%d",&x[k]); for(k=0; k<size-1; k++) { pos = k; /* assume first element is the smallest element */ for(j=k+1; j<size; j++) { if (x[j] < x[pos]) /*x[pos] is the smallest element as of now*/ pos = j; } if (x[pos] < x[k]) {

temp = x[k]; /* swap content of x[k] and x[pos] */ x[k] = x[pos]; x[pos] = temp; } for(k=0;k<size;k++)/* print the sorted (non-decreasing) list */ printf("%d ",x[k]); return 0; }

Page 9: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Example

-7 12 -5 6 72 21 3 45 x:

3 12 -5 6 72 21 -7 45 x:

-7 -5 12 6 72 21 3 45 x:

-7 -5 3 6 72 21 12 45 x:

-7 -5 3 6 72 21 12 45 x:

Swap

Swap

Swap

for(k=0;k<size-1;k++){pos=k; for

(j=k+1;j<size;j++){if(x[j]<x[pos])

pos=j;}

temp=x[k]; x[k]=x[pos];

x[pos]=temp;}

-7 -5 3 6 12 21 72 45 x:

-7 -5 3 6 12 21 45 72 x:

-7 -5 3 6 12 21 72 45 x:

k pos

k pos

Page 10: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Analysis

Sorting When k=0, in worst case

(n-1) comparisons to find minimum. When k=1, in worst case

(n-2) comparisons to find minimum. ….. (n-1)+(n-2)+……+1= n(n-1)/2

for(k=0;k<size;k++)

scanf("%d",&x[k]); for (k=0; k<size-1; k++) { pos = k; for(j=k+1; j<size; j++)

{ if (x[j] < x[pos]) pos = j; }

temp = x[k]; x[k] = x[pos]; x[pos] = temp; } for(k=0;k<size;k++) printf("%d ",x[k]);

Howmanystepsarerequired?Letusassumetherearenelements(size=n).EachstatementexecutesinconstantLme.

ToreadforloopwilltakeoftheorderofnLme

ToprintforloopwilltakeoftheorderofnLme

TotalJme=2×orderofn+orderofn2=orderofn2

Page 11: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

AnalysisHowmanystepsarerequired?Letusassumetherearenelements(size=n).EachstatementexecutesinconstantLme.

BestCase?WorstCase?AverageCase?

for(k=0;k<size;k++)

scanf("%d",&x[k]); for (k=0; k<size-1; k++) { pos = k; for(j=k+1; j<size; j++)

{ if (x[j] < x[pos]) pos = j; }

temp = x[k]; x[k] = x[pos]; x[pos] = temp; } for(k=0;k<size;k++) printf("%d ",x[k]);

Page 12: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

InserJonSort•  GeneralsituaLon:

0 size-1

i

remainder, unsorted smallest elements, sorted

0 size-1 i x:

i

j

Compare and Shift till x[i] is larger.

Page 13: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

InserJonSorJng

int list[100], size;

__________________;

for (i=1; i<size; i++) {

item = list[i] ;

for (j=i-1; (j>=0)&& (list[j] > item); j--)

list[j+1] = list[j]; list[j+1] = item ;

}

__________________;

Page 14: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

CompleteInserJonSort#include <stdio.h> /* Sort x[0..size-1] in non-decreasing order */ #define SIZE 100 int main() { int i,j,x[SIZE],size,temp; printf("Enter the number of elements: "); scanf("%d",&size); printf("Enter the elements: "); for(i=0;i<size;i++) scanf("%d",&x[i]); for (i=1; i<size; i++) {

temp = x[i] ;

for (j=i-1; (j>=0)&& (x[j] > temp); j--)

x[j+1] = x[j];

x[j+1] = temp ;

} for(i=0;i<size;i++) /* print the sorted (non-decreasing) list */ printf("%d ",x[i]); return 0; }

Page 15: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

InserJonSortExample

Input:312-567221-745312-567221-745-531267221-745-536127221-745-536127221-745-536122172-745-7-53612217245-7-53612214572Output:

for(i=1;i<size;i++){ temp=x[i]; for(j=i-1;(j>=0)&&(x[j]>temp);j--) x[j+1]=x[j]; x[j+1]=temp;}

-536122172-745-7-536122172__45-5361221__7245-53612__217245-536__12217245-53__612217245-5__3612217245__-53612217245-7-53612217245

Page 16: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

TimeComplexity

•  Numberofcomparisonsandshifing:o  WorstCase?1+2+3+……+(n-1)=n(n-1)/2o  BestCase?1+1+……(n-1)Lmes=(n-1)

Page 17: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

BubbleSort

In every iteration heaviest element drops at the bottom.

The bottom moves upward.

Page 18: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Example

3 12 -5 6 72 21 -7 45 x:

Pass:1

3 12 -5 6 72 21 -7 45 x:

3 -5 12 6 72 21 -7 45 x:

3 -5 6 12 72 21 -7 45 x:

3 -5 6 12 72 21 -7 45 x:

3 -5 6 12 21 72 -7 45 x:

3 -5 6 12 21 -7 72 45 x:

3 -5 6 12 21 -7 45 72 x:

Page 19: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

BubbleSort

int pass,j,a[100],temp;

/* read number of elements as n and elements as a[] */ for(pass=0; pass<n; pass++) { /* sub pass */

for(j=0; j<n-1; j++) { if(a[j]>a[j+1]) { temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; } }

} /* print sorted list of elements */

Page 20: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Example

3 12 -5 6 72 21 -7 45 x:

Pass:1

3 12 -5 6 72 21 -7 45 x:

3 -5 12 6 72 21 -7 45 x:

3 -5 6 12 72 21 -7 45 x:

3 -5 6 12 72 21 -7 45 x:

3 -5 6 12 21 72 -7 45 x:

3 -5 6 12 21 -7 72 45 x:

3 -5 6 12 21 -7 45 72 x:

Page 21: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Example

3 -5 6 12 21 -7 45 72 x:

Pass:2

-5 3 6 12 21 -7 45 72 x:

-5 3 6 12 21 -7 45 72 x:

-5 3 6 12 21 -7 45 72 x:

-5 3 6 12 21 -7 45 72 x:

-5 3 6 12 -7 21 45 72 x:

-5 3 6 12 -7 21 45 72 x:

Page 22: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

TimeComplexity

•  Numberofcomparisons:o  WorstCase?1+2+3+……+(n-1)=n(n-1)/2o  BestCase? Same

Howdoyoumakebestcasewith(n-1)comparisonsonly?

Page 23: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

BubbleSort

int pass,j,a[100],temp,swapflag; /* read number of elements as n and elements as a[] */ for(pass=0; pass<n; pass++) {

swapflag=0; for(j=0; j<n-1; j++) { if(a[j]>a[j+1]) { temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; swapflag=1; } } if(swapflag==0) break;

} /* print sorted list of elements */

Page 24: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

CanweimprovethesorJngJme?

Page 25: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

BasisofefficientsorJngalgorithms•  TwoofthemostpopularsorLngalgorithmsarebasedondivide-and-conquerapproach.–  Quicksort– Mergesort

•  Basicconcept:sort(list){ifthelisthaslengthgreaterthan1{ParLLonthelistintolowlistandhighlist;sort(lowlist);sort(highlist);combine(lowlist,highlist);}}

Page 26: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

MergeSort

Page 27: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Mergingtwosortedarrays

Spli\ngarrays

Example

3 12 -5 6 72 21 -7 45 x:

3 12 -5 6 72 21 -7 45

3 12 -5 6 72 21 -7 45

3 12 -5 6 72 21 -7 45

3 12 -5 6 21 72 -7 45

-5 3 6 12 -7 21 45 72

-7 -5 3 -7 -5 3 6 12 21 45 72

Page 28: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

MergeSortCprogram#include<stdio.h> void mergesort(int a[],int i,int j); void merge(int a[],int i1,int j1,int i2,int j2); int main() { int a[30],n,i; printf("Enter no of elements:"); scanf("%d",&n); printf("Enter array elements:"); for(i=0;i<n;i++) scanf("%d",&a[i]); mergesort(a,0,n-1); printf("\nSorted array is :"); for(i=0;i<n;i++) printf("%d ",a[i]); return 0; }

Page 29: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

MergeSortCprogram

void mergesort(int a[],int i,int j) { int mid; if(i<j) { mid=(i+j)/2;

/* left recursion */ mergesort(a,i,mid);

/* right recursion */ mergesort(a,mid+1,j); /* merging of two sorted sub-arrays */ merge(a,i,mid,mid+1,j); } }

Page 30: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

MergeSortCprogramvoid merge(int a[],int i1,int i2,int j1,int j2) { int temp[50]; //array used for merging int i=i1,j=j1,k=0; while(i<=i2 && j<=j2) //while elements in both lists { if(a[i]<a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; } while(i<=i2) //copy remaining elements of the first list temp[k++]=a[i++]; while(j<=j2) //copy remaining elements of the second list temp[k++]=a[j++]; for(i=i1,j=0;i<=j2;i++,j++) a[i]=temp[j]; //Transfer elements from temp[] back to a[] }

Page 31: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Spli\ngTrace

-56 23 43 -5 -3 0 123 -35 87 56 75 80

-56 -35 -5 -3 0 23 43 56 75 80 87 123

-56 23 43

23 43

-56 23 43 -5 -3 0 123 -35 87 56 75 80

-56 23 43 -5 -3 0 -3 0

-3 0

123 -35 87

-35 87

123 -35 87 56 75 80

56 75 80

75 80

Worst Case: O(n.log(n))

Page 32: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Quicksort

•  Ateverystep,weselectapivotelementinthelist(usuallythefirstelement).

– WeputthepivotelementinthefinalposiLonofthesortedlist.

–  Alltheelementslessthanorequaltothepivotelementaretothelef.

–  Alltheelementsgreaterthanthepivotelementaretotheright.

Page 33: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

ParJJoning

0 size-1

x:

pivot

Values smaller Values greater

Perform partitioning

Perform partitioning

Page 34: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

QuickSortprogram#include <stdio.h> void quickSort( int[], int, int); int partition( int[], int, int); void main() {

int i,a[] = { 7, 12, 1, -2, 0, 15, 4, 11, 9}; printf("\n\nUnsorted array is: "); for(i = 0; i < 9; ++i) printf(" %d ", a[i]); quickSort( a, 0, 8); printf("\n\nSorted array is: "); for(i = 0; i < 9; ++i) printf(" %d ", a[i]);

} void quickSort( int a[], int l, int r) {

int j; if( l < r ) { // divide and conquer j = partition( a, l, r); quickSort( a, l, j-1); quickSort( a, j+1, r); }

}

Page 35: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

QuickSortprogramint partition( int a[], int l, int r) {

int pivot, i, j, t; pivot = a[l]; i = l; j = r+1; while( 1) { do { ++i; } while(a[i]<=pivot && i<=r);

do {

--j; } while( a[j] > pivot ); if( i >= j ) break; t = a[i]; a[i] = a[j]; a[j] = t; } t = a[l]; a[l] = a[j]; a[j] = t; return j;

}

Page 36: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

TraceofParJJoning

Input: 45 -56 78 90 -3 -6 123 0 -3 45 69 68

Output: -56 -6 -3 -3 0 45 45 68 69 78 90 123

45 -56 78 90 -3 -6 123 0 -3 45 69 68

-6 -56 -3 0 -3 45 123 90 78 45 69 68 -3 0 -3 -6 -56

0 -3 -3 -3 0

68 90 78 45 69 123 78 90 69 68 45

78 69 90

Page 37: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

2k=n

TimeComplexity

•  ParLLoningwithnelements.-No.ofcomparisons:n-1•  WorstCasePerformance:(n-1)+(n-2)+(n-3)+……….+1=n(n-1)/2•  BestCaseperformance:(n-1)+2((n-1)/2-1)+4(((n-1)/2-1)-1)/2-1)..ksteps=O(n.log(n))

Choice of pivot element affects the time complexity.

Page 38: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

SearchinganArray:LinearandBinarySearch

Page 39: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Searching

•  Checkifagivenelement(key)occursinthearray.

Page 40: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

LinearSearch

•  Basicidea:–  Startatthebeginningofthearray.–  Inspecteveryelementtoseeifitmatchesthekey.

Page 41: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

/*Ifkeyappearsina[0..size-1],printitslocaLonpos,wherea[pos]==key.Elseprintunsuccessfulsearch*/#include<stdio.h>intmain(){intsize,a[100],key,i,pos;prinp("Enterthenumberofelements:");scanf("%d",&size);prinp("Entertheelements:");for(i=0;i<size;i++)scanf("%d",&a[i]);prinp("Enterthekeyelement:");scanf("%d",&key);for(pos=-1,i=0;i<size;i++){/*iniLalizingposasunsuccessfulsearch*/if(a[i]==key){pos=i;break;}} if(pos==-1)

prinp("Unsuccessfulsearch\n");else prinp("Theelementispresentat%dposiLon\n",pos+1);

return0;}

LinearSearch

Page 42: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

/*Ifkeyappearsina[0..size-1],printitslocaLonpos,wherea[pos]==key.Elseprintunsuccessfulsearch*/#include<stdio.h>#include<stdlib.h>/*forexit()funcJon*/#defineSIZE100voidmain(){intsize,a[SIZE],key,i,pos;prinp("Enterthenumberofelements:");scanf("%d",&size);if(size>SIZE){/*sizeisavariable,SIZEisnot!!*/prinh("ArraySizeerror!!!IamexiJng....\n");exit(0);}prinp("Entertheelements:");for(i=0;i<size;i++)ascanf("%d",&a[i]);prinp("Enterthekeyelement:");scanf("%d",&key);for(pos=-1,i=0;i<size;i++){/*iniLalizingposasunsuccessfulsearch*/if(a[i]==key){pos=i;break;}}(pos==-1)?prinh("Unsuccessfulsearch\n"):prinh("Theelementispresentat%dposiJon\n",pos+1);}

LinearSearch

1.  IffuncLontypeisvoidthennothing is to be returnedfromthefuncLon.

2.  Itisalwaysgoodtoassignareturn data type (includingvoid)witheachfuncLon.

3.  exit() will exit from theprogramwithout execuLngremaining statements ofthe program. This needsstdlib.hasheaderfile.

Page 43: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

LinearSearch

intx[]={12,-3,78,67,6,50,19,10};

•  Tracethefollowingcalls:search6;search5;

Returns 5

Unsuccessful search

Page 44: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

LinearSearch

•  Basicidea:–  Startatthebeginningofthearray.–  Inspecteveryelementtoseeifitmatchesthekey.

•  Timecomplexity:–  Ameasureofhowlonganalgorithmtakestorun.–  Iftherearenelementsinthearray:

•  Bestcase:matchfoundinfirstelement(1searchoperaLon)•  Worstcase:nomatchfound,ormatchfoundinthelastelement(nsearchoperaLons)•  Average:

(n+1)/2searchoperaLons

Page 45: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

intx[]={-3,6,10,11,12,19,50,67,78};

•  Tracethefollowingcalls:

search6;search5;

SearchonSortedList

intx[]={12,-3,78,67,6,50,19,10,11};

Page 46: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

BinarySearch

•  Ineverystep,wereducethenumberofelementstosearchinbyhalf.

•  Binarysearchworksifthearrayissorted.– Lookforthetargetinthemiddle.–  Ifyoudon’tfindit,youcanignorehalfofthearray,andrepeattheprocesswiththeotherhalf.

Page 47: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

TheBasicStrategy•  Whatdowewant?

– Lookat[(L+R)/2].MoveLorRtothemiddledependingontest.

– RepeatsearchoperaLoninthereducedinterval.

0 x:

n-1

L R

x[m]>key

no yes

Elements in Ascending order

m

<=key L R

>key R L

Page 48: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

BinarySearch/*Ifkeyappearsinx[0..size-1],printsitslocaLonposwhere

x[pos]==key.Ifnotfound,print-1*/intmain() {

intx[100],size,key;intL,R,mid;_________________;

while(____________)

{__________________;

}_________________;

}

Page 49: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

ThebasicsearchiteraJon/*Ifkeyappearsinx[0..size-1],printsitslocaLonposwherex[pos]==key.If

notfound,print-1*/intmain() {

intx[100],size,key;intL,R,mid;_________________;while(____________)

{mid=(L+R)/2;

if(x[mid]>key) R=mid; elseL=mid;}_________________;

}

Page 50: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

LoopterminaJon/*Ifkeyappearsinx[0..size-1],printsitslocaLonposwherex[pos]==key.If

notfound,print-1*/intmain() {

intx[100],size,key;intL,R,mid;_________________;while(L+1!=R)

{mid=(L+R)/2;

if(x[mid]<=key) L=mid; elseR=mid;}_________________;

}

Page 51: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Printresult/*Ifkeyappearsinx[0..size-1],printsitslocaLonposwherex[pos]==key.If

notfound,print-1*/intmain() {

intx[100],size,key;intL,R,mid;_________________;while(L+1!=R)

{mid=(L+R)/2;

if(x[mid]<=key) L=mid; elseR=mid;}if(L>=0&&x[L]==key)prinh(“%d”,L);

elseprinh(“-1”);}

Page 52: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

IniJalizaJon/*Ifkeyappearsinx[0..size-1],printsitslocaLonposwherex[pos]==key.Ifnot

found,print-1*/intmain() {

intx[100],size,key;intL,R,mid;

_________________;L=-1;R=size;while(L+1!=R)

{mid=(L+R)/2;

if(x[mid]<=key) L=mid; elseR=mid;}if(L>=0&&x[L]==key)prinp(“%d”,L);

elseprinp(“-1”);}

Page 53: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

CompleteCProgram/*Ifkeyappearsinx[0..size-1],printsitslocaLonposwherex[pos]==key.Ifnotfound,print-1*/voidmain() {

intx[100],size,key;intL,R,mid;

prinp("Enterthenumberofelements:");scanf("%d",&size);prinp("Entertheelements:");for(i=0;i<size;i++)scanf("%d",&a[i]);prinp("Enterthekeyelement:");scanf("%d",&key);

L=-1;R=size;while(L+1!=R) {

mid=(L+R)/2; if(x[mid]<=key) L=mid; elseR=mid;}if(L>=0&&x[L]==key)prinp(“%d”,L);

elseprinp(“-1”);}

Page 54: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

BinarySearchExamples

-17 -5 3 6 12 21 45 63 50

Trace :

binsearch 3;

binsearch 145;

binsearch 45;

Sorted array

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;

Page 55: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Isitworththetrouble?

•  Supposethereare1000elements.•  Ordinarysearch

–  Ifkeyisamemberofx,itwouldrequire500comparisonsontheaverage.

•  Binarysearch–  afer1stcompare,lefwith500elements.–  afer2ndcompare,lefwith250elements.–  Aferatmost10steps,youaredone.

Whatisbestcase?Whatisworstcase?

Page 56: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

TimeComplexity

•  Iftherearenelementsinthearray.– Numberofsearchesrequired:log2n

•  Forn=64(say)–  IniLally,listsize=64.– Aferfirstcompare,listsize=32.– Afersecondcompare,listsize=16.– Aferthirdcompare,listsize=8.– …….– Afersixthcompare,listsize=1.

log264 = 6

2k= n, Where k is the number of steps.

Page 57: CS11001/CS11002 Programming and Data Structures (PDS ...cse.iitkgp.ac.in/~pds/semester/2017s/slides/Presentation6.pdf · SorJng Problem • What we want : Data sorted in order •

Homework

Modifythealgorithmbycheckingequalitywithx[mid].