Tests passed.
This commit is contained in:
		
						commit
						797d731eb0
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | .idea | ||||||
|  | cmake-build-debug/ | ||||||
							
								
								
									
										11
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | cmake_minimum_required(VERSION 3.30) | ||||||
|  | project(code) | ||||||
|  | 
 | ||||||
|  | set(CMAKE_CXX_STANDARD 23) | ||||||
|  | 
 | ||||||
|  | add_executable(code main.cpp | ||||||
|  |         sort.cpp | ||||||
|  |         sort.h | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | target_link_libraries(code gtest gmock pthread) | ||||||
							
								
								
									
										77
									
								
								main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								main.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | |||||||
|  | #include "sort.h" | ||||||
|  | 
 | ||||||
|  | #include <gtest/gtest.h> | ||||||
|  | #include <gmock/gmock.h> | ||||||
|  | 
 | ||||||
|  | TEST(QuickSortTest, SortsArrayInAscendingOrder) | ||||||
|  | { | ||||||
|  |     // Test input array
 | ||||||
|  |     char* arr[] = { "banana", "apple", "cherry", "date", "elderberry" }; | ||||||
|  |     const size_t length = std::size(arr); | ||||||
|  | 
 | ||||||
|  |     // Sort the array
 | ||||||
|  |     quick_sort(arr, length); | ||||||
|  | 
 | ||||||
|  |     // Check if the array is sorted in ascending order
 | ||||||
|  |     for (size_t i = 1; i < length; i++) | ||||||
|  |     { | ||||||
|  |         ASSERT_TRUE(strcmp(arr[i - 1], arr[i]) <= 0); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TEST(QuickSortTest, SingleElementArray) { | ||||||
|  |     // Test sorting an array with a single element.
 | ||||||
|  |     char* arr[] = { "hello" }; | ||||||
|  |     quick_sort(arr, 1); | ||||||
|  |     ASSERT_STREQ(arr[0], "hello"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TEST(QuickSortTest, SortedArray) { | ||||||
|  |     // Test sorting an array that is already sorted.
 | ||||||
|  |     char* arr[] = { "alpha", "beta", "gamma" }; | ||||||
|  |     quick_sort(arr, 3); | ||||||
|  |     ASSERT_STREQ(arr[0], "alpha"); | ||||||
|  |     ASSERT_STREQ(arr[1], "beta"); | ||||||
|  |     ASSERT_STREQ(arr[2], "gamma"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TEST(QuickSortTest, ReverseSortedArray) { | ||||||
|  |     // Test sorting an array that is reverse sorted.
 | ||||||
|  |     char* arr[] = { "gamma", "beta", "alpha" }; | ||||||
|  |     quick_sort(arr, 3); | ||||||
|  |     ASSERT_STREQ(arr[0], "alpha"); | ||||||
|  |     ASSERT_STREQ(arr[1], "beta"); | ||||||
|  |     ASSERT_STREQ(arr[2], "gamma"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TEST(QuickSortTest, RandomArray) { | ||||||
|  |     // Test sorting an array with random elements.
 | ||||||
|  |     char* arr[] = { "hello", "world", "foo", "bar", "baz", "qux", "quux", "corge" }; | ||||||
|  |     quick_sort(arr, 8); | ||||||
|  |     ASSERT_STREQ(arr[0], "bar"); | ||||||
|  |     ASSERT_STREQ(arr[1], "baz"); | ||||||
|  |     ASSERT_STREQ(arr[2], "corge"); | ||||||
|  |     ASSERT_STREQ(arr[3], "foo"); | ||||||
|  |     ASSERT_STREQ(arr[4], "hello"); | ||||||
|  |     ASSERT_STREQ(arr[5], "quux"); | ||||||
|  |     ASSERT_STREQ(arr[6], "qux"); | ||||||
|  |     ASSERT_STREQ(arr[7], "world"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TEST(SwapTest, SwapsValuesCorrectly) | ||||||
|  | { | ||||||
|  |     char* a = "apple"; | ||||||
|  |     char* b = "banana"; | ||||||
|  | 
 | ||||||
|  |     swap(&a, &b); | ||||||
|  | 
 | ||||||
|  |     EXPECT_STREQ(a, "banana"); | ||||||
|  |     EXPECT_STREQ(b, "apple"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main(int argc, char **argv) | ||||||
|  | { | ||||||
|  |     ::testing::InitGoogleTest(&argc, argv); | ||||||
|  | 
 | ||||||
|  |     return RUN_ALL_TESTS(); | ||||||
|  | } | ||||||
							
								
								
									
										50
									
								
								sort.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								sort.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | #include "sort.h" | ||||||
|  | 
 | ||||||
|  | #include <cstring> | ||||||
|  | 
 | ||||||
|  | void swap(char **a, char **b) { | ||||||
|  |     char *temp = *a; | ||||||
|  |     *a = *b; | ||||||
|  |     *b = temp; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int partition(char **arr, const int first, const int last) | ||||||
|  | { | ||||||
|  |     const char *pivot = arr[last]; | ||||||
|  | 
 | ||||||
|  |     int i = first; | ||||||
|  |     for (int j = first; j < last; j++) { | ||||||
|  |         if (strcmp(arr[j], pivot) <= 0) { | ||||||
|  |             swap(&arr[i], &arr[j]); | ||||||
|  |             i++; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     swap(&arr[i], &arr[last]); | ||||||
|  |     return (i); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void quick_sort(char **arr, const size_t length) { | ||||||
|  |     if (length <= 1) { | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |     int low = 0, high = length - 1; | ||||||
|  |     int stack[high - low + 1]; | ||||||
|  |     int top = -1; | ||||||
|  |     stack[++top] = low; | ||||||
|  |     stack[++top] = high; | ||||||
|  |     while (top >= 0) { | ||||||
|  |         high = stack[top--]; | ||||||
|  |         low = stack[top--]; | ||||||
|  |         const int pivot_pos = partition(arr, low, high); | ||||||
|  | 
 | ||||||
|  |         if (pivot_pos - 1 > low) { | ||||||
|  |             stack[++top] = low; | ||||||
|  |             stack[++top] = pivot_pos - 1; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (pivot_pos + 1 < high) { | ||||||
|  |             stack[++top] = pivot_pos + 1; | ||||||
|  |             stack[++top] = high; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user