sorting techniques –selection sort –bubble sort. selection sort working : “select” an...
TRANSCRIPT
Sorting Techniques
– Selection Sort
– Bubble Sort
SelectionSelection SortSortWorking : “SELECT” an Element and Put in PROPER PLACE
Description :
1. From position 0, find the smallest and then exchange it with the
element in position 0.
2. From position 1, find the smallest and exchange with position 1.
3. Now from 2 do the same until you have reached the end of the
list
General Algorithm:
for positions i = 0 to max-1
find smallest from position i
exchange with position i
Selection
Sort
67 84 49 50 7533 21
67 84 49 50 753321
67 84 49 50 753321
678449 50 753321
67 8449 50 753321
67 8449 50 753321
Starting from
position 0 find
the smallest and
exhange with element in position 0start at
position 1 ….
Selection SortSelection Sort#define MAX 5int Min(int a[], int pos){int i,m,index=pos;m=a[pos]; // Get the Current Valuefor (i=pos+1;i<MAX;i++) //Search from next{ if (a[i]<m) {m=a[i];index=i;} return index;}
void main(){int A[MAX],i,temp,k;for (i=0;i<MAX;i++) cin>>A[i]; //INPUT
for (i=0;i<MAX;i++){k=Min(A,i); //FIND if (A[k]<A[i]) //SWAP{temp=A[k];A[k]=A[i];A[i]=temp;}}
cout<<”Sorted elements “ << endl;
for (i=0;i<MAX;i++)cout<<A[i]<<endl;}
8 45 56 7823 32 After pass 5
23 8 32 5678 45 Original list
8 23 32 5678 45 After pass 1
8 78 32 5623 45 After pass 2
8 78 45 5623 32 After pass 3
8 45 78 5623 32 After pass 4
E
X
E
R
C
I
S
E
Bubble SortBubble Sort Working:
It works by comparing neighbours in the array and exchanging them if necessary to put the smaller of the pair first.
On each pass through the array an element 'bubbles' up into place.
General Algorithm: for (i=0;i<max;i++)
for (j=0;j<max-1;j++)
if (a[j]>a[j+1] )
{ save = a[j]
a[j] = a[j+1]
a[j+1] = save
}
Bubble Sort
5
8
1
2
3
I = 0 j= 4 ( compare j with j-1and swap )
5
1
8
2
3
5
3
8
2
1
5
3
8
1
2
1
3
8
5
2
Pass-1
1
2
538
1
2
53
8
Pass-2 Pass-3
Bubble SortBubble Sort// The Algorithm Sinks the LARGEST TO THE BOTTOM
#define MAX 5
void main()
{
int A[MAX],i,j,temp,sorted=0;
for (i=0;i<MAX;i++) cin>>A[i];
i=0;
while ((i<MAX)&&(sorted==0)){sorted=1;for (j=0;j<MAX-i-1;j++){if (A[j]>A[j+1]) // Largest sinks
{ temp=A[j];A[j]=A[j+1];A[j+1]=temp;sorted=0;
}}i++;}
cout<<”Sorted Elements"<<endl;
for (i=0;i<MAX;i++)cout<<A[i]<<endl;
}
23 8 32 5678 45 Original list
8 45 32 5623 78 After pass 1
8 78 45 5623 32 After pass 2
8 45 78 5623 32 After pass 3
8 45 56 7823 32 After pass 4Sorted!
EXERCISEEXERCISE
Merge Sort
Concept UsedConcept Used• What is the concept used What is the concept used in Merge and Quick Sort? Merge and Quick Sort?
This two sorting techniques use This two sorting techniques use
“ “DIVIDE and CONQUERDIVIDE and CONQUER “ Technique. “ Technique.
• What is Divide and Conquer Technique?The Problem is divide into similar The Problem is divide into similar subproblemssubproblems
When to stop Dividing?When to stop Dividing?
When the problem is small enough to be When the problem is small enough to be handled.handled.
Outline for divide and conquer Sorting ( NEXT )Outline for divide and conquer Sorting ( NEXT )
Outline : Outline : Divide and conquer SortingDivide and conquer SortingSortlist( )
{ if the list has length greater than 1 then
{ partition the list into lowlist,highlist;
sort(lowlist);
sort(highlist);
combine(lowlist,highlist);
} }
Where does the Quick and merge sort differ?
They differ in the Way the the List is partitioned
Merge SortMerge SortWorking Break the list into two sublists of size as nearly equal as possible and then sort them separately. Then Merge the two sorted list. Hence know as MERGE sort.
EG : 8 7 6 5 4 3 2 1 ( MID = L+H/2 = 1+8 /2 = 4 )
8 7 6 5 ( 1+4/2=2) 4 3 2 1 ( 1+4/2=2)
8 7 6 5 4 3 2 1
Now Sort & Merge:
7 8 5 6 3 4 1 2
5 6 7 8 1 2 3 4
1 2 3 4 5 6 7 8
E
X
C
E
R
S
I
S
E
26 33 35 29 19 12 22
26 33 35 29 19 12 22
26 33 35 29 19 12 22
26 33 29 35 12 19 22
26 33 3529 12 19 22
26 33 352912 19 22
Algorithm - Merge SortVoid merge(int lpos, int rpos, int rend)
{ int I,lend,numelements,tmppos,tmparray[MAX]
lend = rpos-1; tmppos = lpos;
numelements = rend - lpos+1;
while ((lpos <= lend) && ( rpos <=rend))
if ( a[lpos] <= a[rpos)
tmparray[tmppos++] = a[lpos++];
else tmparray[tmppos++] = a[rpos++];
while (lpos <= lend)
tmparray[tmppos++] = a[lpos++];
while (rpos <= rend)
tmparray[tmppos++] = a[rpos++];
for (I=0;I<numelements;I++,rend--)
a[rend]= tmparray[rend];
}
Void mergesort( int left, int right )
int center;
if ( left < right)
{ center = (left=right/2);
mergesort(left,center);
mergesort(center+1,right);
merge(left,center+1,right);
}
Void main( )
{//input
MergeSort(0,Max-1)
//output }
7 8 5 6
7 85 6