sorting techniques –selection sort –bubble sort. selection sort working : “select” an...

Post on 18-Dec-2015

213 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related