Sorting Techniques – Insertion Sort – Shell Sort What is sorting? Sorting means “Putting things in Order” or “arranging” Arranging can be done in two ways Ascending Order ( Smallest to Largest ) Descending Order ( Largest to Smallest ) In default Sorting Means arranging in ascending order There are many algorithms for sorting, some simple but perhaps inefficient others complicated but efficient. • We will look at seven algorithms for sorting Insertion Sorting Working: This is the way that most people sort playing cards The cards are picked up one by one and put in the proper place. •The Elements are Picked one by one and put into the Proper Place #define MAX 5 void main() { int A[MAX],i,j,current; cout<<"Enter "<<MAX<<" elements to be sorted:"<<endl; for (i=0;i<MAX;i++) cin>>A[i]; for (i=1;i<MAX;i++) { current= A[i]; //33 j=i; //1 while ((j>0)&&(current<A[j-1])) { // 1>0 && 33 < 67 A[j]= A[j-1]; // 67 moved to next j--; A[j]= current; //33 moved to previous }}cout<<"The elements after Sort"<<endl; for (i=0;i<MAX;i++) cout<<A[i]<<endl; } 67 33 21 84 49 50 75 67 33 67 21 33 67 21 33 67 84 21 33 49 67 84 21 33 49 50 67 84 21 33 49 50 67 75 84 Shell Sort designed by Shell, is an improvement on the insertion sort. drawbacks of insertion sort : The exchanging was done with adjacent elements. Improvement If exchanging is done with elements that are further apart then the algorithm would be more efficient. Method: Find an appropriate increment size (e.g. n/3 + 1) • Now do insertion sort on the elements separated by this increment. 67 S 67 h e 33 l l 21 S o r 67 t 33 21 33 84 21 75 49 67 75 49 50 49 67 75 Insertion Sort 33 49 21 50 33 84 50 33 75 Insertion Sort Insertion Sort 50 21 84 49 21 75 49 50 IS 21 49 67 IS 33 50 75 50 67 75 84 84 84 84 Inc=n/3+1 7/3+1=3 3/3+1=2 Shell Sort void SortInterval(int start,int increment,int a[]) { int i,j,current; i=start+increment; // I =3 while (i<MAX) // 3<7 { current=a[i]; //84 j=i; //j=3 while ((j>start) && (current<a[jincrement])) { // 3 >0 && 84 <67 a[j]=a[j-increment]; j=j-increment; a[j]= current; } i=i+increment; // I =6 } } void main() {int A[MAX],i,increment,start; cout<<"Enter "<<MAX<<" elements to be sorted:"<<endl; for (i=0;i<MAX;i++) cin>>A[i]; increment=MAX; do {increment=increment/3+1; for (start=0;start<increment;start++) SortInterval(start,increment,A); }while (increment>1); cout<<"The elements after Shell Sort"<<endl; for (i=0;i<MAX;i++) cout<<A[i]<<endl; }