From 5e70b300eab2ce33cf1adbd3138be8d661c40e45 Mon Sep 17 00:00:00 2001 From: Aarushi Singh <175547726+The-AarushiSingh@users.noreply.github.com> Date: Thu, 30 Oct 2025 14:54:17 +0530 Subject: [PATCH] Fix: out-of-bounds issue in counting_sort_string.cpp (#3055) --- sorting/counting_sort_string.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/sorting/counting_sort_string.cpp b/sorting/counting_sort_string.cpp index 69d80c18a32..dd9fd1a306c 100644 --- a/sorting/counting_sort_string.cpp +++ b/sorting/counting_sort_string.cpp @@ -3,23 +3,21 @@ using namespace std; -void countSort(string arr) { - string output; +void countSort(string& arr) { + int n = arr.length(); + string output(n, ' '); // pre-allocate space - int count[256], i; - for (int i = 0; i < 256; i++) count[i] = 0; + int count[256] = {0}; + for (int i = 0; i < n; ++i) ++count[(unsigned char)arr[i]]; - for (i = 0; arr[i]; ++i) ++count[arr[i]]; + for (int i = 1; i < 256; ++i) count[i] += count[i - 1]; - for (i = 1; i < 256; ++i) count[i] += count[i - 1]; - - for (i = 0; arr[i]; ++i) { - output[count[arr[i]] - 1] = arr[i]; - --count[arr[i]]; + for (int i = 0; i < n; ++i) { + output[count[(unsigned char)arr[i]] - 1] = arr[i]; + --count[(unsigned char)arr[i]]; } - for (i = 0; arr[i]; ++i) arr[i] = output[i]; - + arr = output; cout << "Sorted character array is " << arr; }