diff --git a/sorts/counting_sort.py b/sorts/counting_sort.py index 4ca682b13..ad98f1a0d 100644 --- a/sorts/counting_sort.py +++ b/sorts/counting_sort.py @@ -57,8 +57,14 @@ def counting_sort(collection): return ordered +def counting_sort_string(string): + return ''.join([chr(i) for i in counting_sort([ord(c) for c in string])]) + if __name__ == '__main__': + # Test string sort + assert "eghhiiinrsssttt" == counting_sort_string("thisisthestring") + try: raw_input # Python 2 except NameError: diff --git a/sorts/countingsort.py b/sorts/countingsort.py deleted file mode 100644 index 18ee8b851..000000000 --- a/sorts/countingsort.py +++ /dev/null @@ -1,42 +0,0 @@ -from __future__ import print_function -# Python program for counting sort - -# This is the main function that sort the given string arr[] in -# in the alphabetical order -def countSort(arr): - - # The output character array that will have sorted arr - output = [0 for i in range(256)] - - # Create a count array to store count of inidividul - # characters and initialize count array as 0 - count = [0 for i in range(256)] - - # For storing the resulting answer since the - # string is immutable - ans = ["" for _ in arr] - - # Store count of each character - for i in arr: - count[ord(i)] += 1 - - # Change count[i] so that count[i] now contains actual - # position of this character in output array - for i in range(256): - count[i] += count[i-1] - - # Build the output character array - for i in range(len(arr)): - output[count[ord(arr[i])]-1] = arr[i] - count[ord(arr[i])] -= 1 - - # Copy the output array to arr, so that arr now - # contains sorted characters - for i in range(len(arr)): - ans[i] = output[i] - return ans - -# Driver program to test above function -arr = "thisisthestring" -ans = countSort(arr) -print ("Sorted string array is %s" %("".join(ans)))