Hi,
I'm working on this assignment for my CS1 class and I'm stuck on the proper use of selection sort (assignment specifies selection, I can't use bubble or any other type of sort).
I have to take integers from a data file (file contents below) and read them into an array of length 15.
After the array is filled use a method to print the list of numbers including their original index/position. I have the code working up to this point.
Here's what my question is: I have to re-sort them in descending order and keep the original index/position. How do I? and more specifically where do use this code?
I have the code provided by the instructor to do this but I'm not sure how to initiate inside the code as I have it. Can it be called in main? should I run main and complete and then use it as a separate method? Can it be its own method inside of main?
Thanks for taking a look and pointing me in the right direction.
Here's my code up to this point (it compiles and runs - output below):
Code:
import java.io.*;
import java.util.*;
public class prgrm10
{ public static void main(String [] args) throws Exception
{ int Max = 15;
double []A = new double[Max];
double []S = new double[Max];
int ACtr = 0;
int i = 0;
int left = 0;
String filename = null;
Scanner console = new Scanner("prgrm10.dat");
String line = null;
StringTokenizer st;
//create the header
PrintWriter outFile = new PrintWriter("prgrm10.out");
outFile.println("Original Unsorted List");
outFile.println("*******************");
outFile.println(String.format("%5s %10s", "INDEX", "NUMBER"));
//input of the array
try
{ filename = console.nextLine();
Scanner fileIn = new Scanner(new FileReader(filename));
while(i < 15 && fileIn.hasNext())
{ line = fileIn.nextLine();
st = new StringTokenizer(line);
A[i] = Double.parseDouble(st.nextToken());
S[i] = i;
i++;
}
//counting the number of lines left in the file
while(fileIn.hasNext())
{ left++;
line = fileIn.nextLine();
}
//processing of the array
//first determine the size of the partially filled array
ACtr = i;
//output of the array to the file
for(int j = 0; j < ACtr; j++)
outFile.println(String.format("%5s %10s", j,A[j]));
//output of the number of elements in the array and the number
//of values from the input file which are not stored in the array
outFile.println("Number of elements in A is " + ACtr);
outFile.println("Number of values not in A is " + left);
} //end try
catch(FileNotFoundException e)
{ System.out.println(filename + " -- File Not Found"); }
outFile.close();
} //end of main
}
Here is the selection sort code as it was provided:
Code:
public static void SelectionSort(int [] A)
{ int k, i, minI, temp;
for(k = 0; k<A.length - 1; k++)
{
minI = k;
for (i = k + 1; i<A.length; i++)
{ if(A[i] < A[minI])
minI = i;
}
temp = A[minI];
A[minI] = A[k];
A[k] = temp;
}
}
Here is the data from the input file that I am working with:
Code:
88
90
56
99
11
78
82
100
27
39
100
99
46
31
73
98
21
7
100
Here is my output currently:
Code:
Original Unsorted List
*******************
INDEX NUMBER
0 88.0
1 90.0
2 56.0
3 99.0
4 11.0
5 78.0
6 82.0
7 100.0
8 27.0
9 39.0
10 100.0
11 99.0
12 46.0
13 31.0
14 73.0
Number of elements in A is 15
Number of values not in A is 4
Bookmarks