/*
Authors:Travis Gadberry
	Patrick Hesser
	Chris Ladewig
Date:	9 Feb 05
Updated:16 Feb 05
File:	SelectionSort.cpp
*/


#ifndef SELECTIONSORT_H
#define SELECTIONSORT_H
  #include "SelectionSort.h"
#endif

SelectionSort::
SelectionSort() {
  n = 1;
  A = new int[n];
  A[0] = 0;
  sorted = true;
}

SelectionSort::
SelectionSort(int * newArray, int N) {
  n = N;
  A = new int[n];
  for(int i=0; i<n; i++)
    A[i] = newArray[i];
  sorted = false;
  resetIncrements();
}

SelectionSort::
~SelectionSort() {
  delete(A);
}

int *
SelectionSort::
getArray() {
  return A;
}

int
SelectionSort::
getN() {
  return n;
}

bool
SelectionSort::
getSorted() {
  return sorted;
}

double
SelectionSort::
getTime() {
  return time;
}

long int
SelectionSort::
getIncrements() {
  return increments;
}

void
SelectionSort::
setArray(int * newArray) {
  delete(A);
  n = sizeof(newArray);
  A = new int[n];
  sorted = false;
}

void
SelectionSort::
sort() {
  time_t t1, t2;
  t1 = clock();

  for(int i=0; i<n-1; i++) {
    int k=i;
    int key=A[i];
    for(int j=i+1; j<n; j++) {
      if(increments++, A[j]<key) {
        k=j;
        key=A[j];
      }
    }
    A[k]=A[i];
    A[i]=key;
  }

  t2 = clock();
  time = (double)((t2 - t1)/CLOCKS_PER_SEC);
}

void
SelectionSort::
setN(int newN) {
  n = newN;
}

void
SelectionSort::
setSorted(bool newSorted) {
  sorted = newSorted;
}

void
SelectionSort::
resetTime() {
  time = 0.0;
}

void
SelectionSort::
resetIncrements() {
  increments = 0;
}

