import java.util.Iterator;
import java.util.Vector;
public class StrandSort {
public static void main(String[] args) {
int a[] = { 5, 1, 4, 2, 8, 0, 2 };
//int a[]={10, 5, 30, 40, 2, 4, 9};
System.out.println("printing the array");
printArray(a);
a= strandSort(a);
System.out.println("printing the sorted array");
printArray(a);
}
static void printArray(int a[])
{
int n = a.length;
for (int i = 0; i < n; i++)
System.out.print(a[i] + " ");
System.out.println();
}
static int [] strandSort(int arr[]){
Vector<Integer> inputList = new Vector<Integer>();
for(int i=0;i<arr.length;i++)
inputList.add(arr[i]);
int z=0;
Vector<Integer> subList = new Vector();
int outputArr [] = new int[arr.length];
int lastItem;
int outputIndex=arr.length-1;
/* lastItem = inputList.get(0);
subList.add(lastItem);
*/
while(outputIndex>0 && z<5){
z++;
boolean swapped = true;
lastItem = inputList.get(0);
subList.add(lastItem);
for(int i=0;i<inputList.size();i++){
if(inputList.get(i)>lastItem){
// lastItem = inputList.get(i);
addInSubList(subList,inputList.get(i));
}
}
Iterator itr = subList.iterator();
while(itr.hasNext()){
inputList.remove(itr.next());
}
int subListSize = subList.size();
for(int j=subListSize-1;outputIndex>=0 && j>=0;outputIndex--,j--){
outputArr[outputIndex]=subList.get(j);
}
System.out.println("inputList::"+inputList);
System.out.println("subList::"+subList);
printArray(outputArr);
subList = new Vector();
}
return outputArr;
}
static void addInSubList(Vector subList,int item){
int i=0;
for(;i<subList.size() && (int)subList.get(i) < item;i++);
subList.add(i, item);
}
}
Output :
printing the array 5 1 4 2 8 0 2 inputList::[1, 4, 2, 0, 2] subList::[5, 8] 0 0 0 0 0 5 8 inputList::[0] subList::[1, 2, 2, 4] 0 1 2 2 4 5 8 printing the sorted array 0 1 2 2 4 5 8