I wrote this code to do insertion and sort, but I encounter segmentaion fault error when running it. I think i didn't use 'new' correctly. Would someone help me fix this?
Code:
// Header file for class
#ifndef INSERTION_SORT_H
#define INSERTION_SORT_H
class Insert_sort
{
private:
int n; // Dimension of the array;
int * arr; // Dynamic array with size n
public:
Insert_sort();
Insert_sort(int size, int p[]);
~Insert_sort();
void sort();
void show();
};
#endif
Code:
#include <iostream>
#include "insertion_sort.h"
using std::cout;
// Constructor + Destructor
Insert_sort::Insert_sort()
{
cout<< "Please use Insert_Sort(int size, int * p])\n";
cout<< "n is set to 0 and arr is set to NULL";
arr = 0;
n = 0;
}
Insert_sort::Insert_sort(int size, int p[])
{
n = size;
arr = new int[n];
for (int i = 0 ; i < n ; i++)
{
arr[ i ] = p [ i ];
}
}
Insert_sort::~Insert_sort()
{
delete [] arr;
}
// Methods
void Insert_sort::sort()
{
int key;
int i,j;
for (j = 1 ; j<n ; j++)
{
key = arr[i];
i = j-1;
while(i>-1 & arr[i]>key)
{
arr[i+1] = arr[i];
i = i-1;
}
arr[i+1] =key;
}
}
void Insert_sort::show()
{
for ( int i = 0; i<n; i++)
cout << arr[i];
}
Code:
// implementation file
#include <iostream>
#include "insertion_sort.h"
using namespace std;
int main()
{
int p[] = {9,100,0,3,4};
Insert_sort A( 5 , p);
A.show();
A.sort();
A.show();
return 0;
}