Efficient sorting
Hello,
In another exercise I was trying, I am trying to write an efficient
sorting algorithm.
Here's mine, with a random number generator at the end to make
testfiles. How do I improve the efficiency of the sorting process?
I've read about the various techniques but without statistical
analysis it is not immediately clear which is best or if there is
indeed a better way than the known best.
Example: Number of operations with a random seed of 0 and a 100,000
line file: 704982704 (assuming my definition of operations is the same
as people who claim nlog(n) - n^2 operations)
Thanks for any input.
// This program sorts a vector of numbers in ascending order
#include <fstream>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
string line;
int i=0, count = 0, temp_int2;
fstream myfile("vector_in.txt");
// Read in number of lines
while (!myfile.eof())
{
getline(myfile,line);
count++;
}
count = count - 1;
myfile.clear(); // forget we hit the end of file
myfile.seekg(0, ios::beg); // move to the start of the file
cout << "Number of file lines = "<< count << "\n";
int vector_in[count];
// Read in data
while (i < count)
{
getline(myfile,line);
vector_in[i] = atoi(line.c_str());
i++;
}
// Swapping sort
int temp_int = 0, operations = 0;
for (int j = 0; j < count; j++)
{
for (i = j+1; i < count; i++)
{
operations++;
if (vector_in[i] < vector_in[j])
{
temp_int = vector_in[i];
vector_in[i] = vector_in[j];
vector_in[j] = temp_int;
}
}
}
for (i = 0; i < count; i++)
cout << vector_in[i] << "\n";
cout << "Number of operations = " << operations << "\n";
return 0;
}
Random number generator:
===================
// This program sorts a vector of numbers in ascending order
#include <fstream>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
string line;
int i=0, count = 0, temp_int2, seed, length;
// Randomly generate file?
fstream myfile("vector_in.txt", ios::out);
cout << "Random seed value less than " << RAND_MAX << "\n";
cin >> seed;
cout << "Length of testfile?" <<"\n";
cin >> length;
// system ("rm vector_in.txt");
{
for (i = 0; i < length; i++)
{
temp_int2 = rand();
myfile << temp_int2 << "\n";
}
myfile<<std::flush;
myfile.close();
}
cout << "File generated.\n";
return 0;
}
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]