Shell is generalization of insertion sort and is
devised by Donald Shell in 1954. The method sorts separate sub-files of
original file i.e.
- Divide the original file into smaller sub-files.
- Sort individual sub-files using any sorting algorithm
We choose increment ‘k’ for dividing the original file into smaller sub-files and process is repeated until k becomes 1.
Source Code:
#include<iostream>using namespace std;class ShellSort{
private:
int no_of_elements;
int elements[10];
public:
void getarray();
void sortit(int [], int);int return_noelements();
void display();
};void ShellSort::getarray(){
cout<<"How many elements? ";
cin>>no_of_elements;cout<<"Insert array of element to sort: ";
for(int i=0;i<no_of_elements;i++){cin>>elements[i];}}int ShellSort::return_noelements(){
return no_of_elements;
}void ShellSort::sortit(int incrmnts[], int numinc){int incr, j, k, span, y;
for(incr = 0; incr < numinc; incr++){
span = incrmnts[incr];for(j = span; j < no_of_elements; j++){
y = elements[j];for(k = j - span; k >=0 && y < elements[k]; k-=span){
elements[k+span] = elements[k];}elements[k+span] = y;}cout<<"Iteration = "<<incr+1<<" Span = "<<span<<" : ";display();if (span==1)
break;
}}void ShellSort::display(){
for(int i = 0 ; i < no_of_elements; i++){cout<<elements[i]<<" ";
}cout<<endl;}int main(){
ShellSort SHS;int n, i, j;
SHS.getarray();n = SHS.return_noelements();int incrmnts[n];
for(i = n,j = 0; i > 0; i = i/2, j++){
incrmnts[j] = i;}SHS.sortit(incrmnts, j+1);return 0;
}
Output:
How many elements? 7
Insert array of element to sort: 75 12 36 35 25 99 62
Iteration : 1 Span = 7 : 75 12 36 35 25 99 62
Iteration : 2 Span = 3 : 35 12 36 62 25 99 75
Iteration : 3 Span = 1 : 12 25 35 36 62 75 99
0 comments:
Post a Comment