I'm trying to implement a gap sort which is a bubble sort that instead of comparing neighboring elements to sort a list, it compares elements 'i' positions apart. I can get the sort to execute the loop once, but I can't figure out how to make my program continue looping until the list is completely sorted. Can anyone help?
Thanks for reading and here is my code:
public static <T extends Comparable<? super T>> void gapSort (T[] data, int i)
{
int position, scan;
T temp;
while(i > 0)
{
for (position = data.length - 1; position >= 0; position--)
{
for (scan = 0; scan <= position - 1; scan++)
{
if (i > scan)
{
if (data[scan].compareTo(data[scan+i]) > 0)
{
/** Swap the values */
temp = data[scan];
data[scan] = data[scan + i];
data[scan + i] = temp;
}
}
else
{
if (data[scan].compareTo(data[scan-i]) < 0)
{
temp = data[scan];
data[scan] = data[scan - i];
data[scan - i] = temp;
}
}
}
}
i--;
}
}
public class SortPhoneList
{
/**
* Creates an array of Contact objects, sorts them, then prints
* them.
*/
public static void main (String[] args)
{
Contact[] friends = new Contact[7];
friends[0] = new Contact ("John", "Smith", "610-555-7384");
friends[1] = new Contact ("Sarah", "Barnes", "215-555-3827");
friends[2] = new Contact ("Mark", "Riley", "733-555-2969");
friends[3] = new Contact ("Laura", "Getz", "663-555-3984");
friends[4] = new Contact ("Larry", "Smith", "464-555-3489");
friends[5] = new Contact ("Frank", "Phelps", "322-555-2284");
friends[6] = new Contact ("Marsha", "Grant", "243-555-2837");
SortingAndSearching.gapSort(friends, 3);
for (int index = 0; index < friends.length; index++)
System.out.println (friends[index]);
}
}