fork download
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. class countingSortWithNegative{
  5. public static void main(String[] arg) throws IOException{
  6.  
  7. int len = Integer.parseInt(br.readLine());
  8. // int range = Integer.parseInt(br.readLine());
  9.  
  10. String st[] = br.readLine().split(" ");
  11.  
  12. int arr[] = new int[len];
  13.  
  14. int i;
  15.  
  16. for(i = 0; i < len; i++){
  17. arr[i] = Integer.parseInt(st[i]);
  18. }
  19.  
  20. countSort(arr);
  21. }
  22.  
  23. static void countSort(int arr[]){
  24. int len = arr.length;
  25.  
  26. int min = arr[0];
  27. int max = arr[0];
  28. int i;
  29. for(i = 1 ; i < len; i++){
  30. if(arr[i] > max){
  31. max = arr[i];
  32. }
  33. else if(arr[i] < min){
  34. min = arr[i];
  35. }
  36. }
  37. int range = max-min+1;
  38.  
  39. int count[] = new int[range+1];
  40.  
  41. for(i = 0 ; i < len; i++){
  42. count[arr[i]-min]++;
  43. }
  44.  
  45. for(i = 1; i < count.length; i++){
  46. count[i] += count[i-1];
  47. }
  48.  
  49. int result[] = new int[len];
  50.  
  51. for(i = len-1; i >= 0; i--){
  52. result[count[arr[i]-min]-1] = arr[i];
  53. count[arr[i]-min]--;
  54. }
  55.  
  56. for(i = 0 ; i <len; i++){
  57. System.out.print(result[i] + " ");
  58. }
  59. }
  60. }
Success #stdin #stdout 0.06s 3359744KB
stdin
10
-5 -1 0 5 -3 10 9 1 12 4
stdout
-5 -3 -1 0 1 4 5 9 10 12