CS11001/CS11002 Programming and Data Structures (PDS...
Transcript of CS11001/CS11002 Programming and Data Structures (PDS...
![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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/1.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/2.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/3.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/4.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/5.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/6.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/7.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/8.jpg)
#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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/9.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/10.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/11.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/12.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/13.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/14.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/15.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/16.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/17.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/18.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/19.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/20.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/21.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/22.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/23.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/24.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/25.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/26.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/27.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/28.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/29.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/30.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/31.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/32.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/33.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/34.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/35.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/36.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/37.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/38.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/39.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/40.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/41.jpg)
/*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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/42.jpg)
/*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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/43.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/44.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/45.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/46.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/47.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/48.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/49.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/50.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/51.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/52.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/53.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/54.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/55.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/56.jpg)
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 •](https://reader033.fdocuments.net/reader033/viewer/2022060309/5f0a78107e708231d42bc955/html5/thumbnails/57.jpg)
Homework
Modifythealgorithmbycheckingequalitywithx[mid].