/**
*
* @param intArray
* @return
*/
public static int[] countingSort(int[]intArray){
int k=findMax(intArray)+1;
int[]tempArray=new int[k];
int[]outArray=new int[intArray.length+1];
for(int value:tempArray) value=0; // initial temp array
for(int index:intArray) tempArray[index]+=1; // confirm each index show tempArray[index] times
for(int i=1;i<k;i++) tempArray[i]+=tempArray[i-1]; // get each location
for(int j=intArray.length-1;j>=0;j--) outArray[tempArray[intArray[j]]--]=intArray[j]; // get the result
int[]result=new int[intArray.length];
for(int i=0;i<result.length;i++){
result[i]=outArray[i+1];
}
return result;
}
/**
*
* @param intArray
* @return
*/
private static int findMax(int[]intArray){
int index=0;
int max=intArray[index];
for(index=0;index<intArray.length;index++){
if(intArray[index]>max) max=intArray[index];
}
return max;
}
*
* @param intArray
* @return
*/
public static int[] countingSort(int[]intArray){
int k=findMax(intArray)+1;
int[]tempArray=new int[k];
int[]outArray=new int[intArray.length+1];
for(int value:tempArray) value=0; // initial temp array
for(int index:intArray) tempArray[index]+=1; // confirm each index show tempArray[index] times
for(int i=1;i<k;i++) tempArray[i]+=tempArray[i-1]; // get each location
for(int j=intArray.length-1;j>=0;j--) outArray[tempArray[intArray[j]]--]=intArray[j]; // get the result
int[]result=new int[intArray.length];
for(int i=0;i<result.length;i++){
result[i]=outArray[i+1];
}
return result;
}
/**
*
* @param intArray
* @return
*/
private static int findMax(int[]intArray){
int index=0;
int max=intArray[index];
for(index=0;index<intArray.length;index++){
if(intArray[index]>max) max=intArray[index];
}
return max;
}