Table of contents
Open Table of contents
Python
코드
import time, random, unittest
def get_quick_sorted(arr):
if len(arr) < 2:
return arr
else:
pivot = arr[0]
left = [*filter(lambda x: x <= pivot, arr[1:])]
right = [*filter(lambda x: x > pivot, arr[1:])]
partial_sorted = get_quick_sorted(left) + [pivot] + get_quick_sorted(right)
QuickSortTest.과정.append(partial_sorted)
return partial_sorted
class QuickSortTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print("0~1000까지의 정수 100개를 랜덤으로 생성합니다.")
cls.random_numbers = [random.randint(0, 1000) for _ in range(100)]
cls.sorted_random_numbers = sorted(cls.random_numbers)
cls.과정 = []
print("Quick Sort 테스트 시작")
@classmethod
def tearDownClass(cls) -> None:
print("\nQuick Sort 테스트 종료\n")
print("Quick Sort 과정을 출력합니다.")
for i, 과정_리스트 in enumerate(cls.과정):
print(f"{i + 1}번째 과정: {과정_리스트}")
def setUp(self) -> None:
self.start_time = time.time()
def tearDown(self) -> None:
self.end_time = time.time()
print(f"\n테스트 소요 시간: {self.end_time - self.start_time:4f}s")
def test_quick_sort(self):
self.assertEqual(
get_quick_sorted(QuickSortTest.random_numbers),
QuickSortTest.sorted_random_numbers,
)
if __name__ == "__main__":
unittest.main(verbosity=2)
How to Run
python version: 3.11.6
Run main.py
pip install pipenv
pipenv --python 3.11.6
pipenv run python3 main.py
Output
0~1000까지의 정수 100개를 랜덤으로 생성합니다.
Quick Sort 테스트 시작
test_quick_sort (__main__.QuickSortTest.test_quick_sort) ...
테스트 소요 시간: 0.000278s
ok
Quick Sort 테스트 종료
Quick Sort 과정을 출력합니다.
1번째 과정: [63, 64]
2번째 과정: [38, 57, 63, 64]
3번째 과정: [34, 38, 57, 63, 64]
4번째 과정: [81, 82, 83]
5번째 과정: [34, 38, 57, 63, 64, 65, 81, 82, 83]
6번째 과정: [103, 122]
7번째 과정: [103, 122, 123, 150]
8번째 과정: [103, 122, 123, 150, 153, 157]
9번째 과정: [103, 122, 123, 150, 153, 157, 176]
10번째 과정: [94, 103, 122, 123, 150, 153, 157, 176]
11번째 과정: [94, 103, 122, 123, 150, 153, 157, 176, 184, 196]
12번째 과정: [34, 38, 57, 63, 64, 65, 81, 82, 83, 83, 94, 103, 122, 123, 150, 153, 157, 176, 184, 196]
13번째 과정: [248, 255]
14번째 과정: [234, 248, 255]
15번째 과정: [234, 248, 255, 256]
16번째 과정: [223, 234, 248, 255, 256]
17번째 과정: [290, 293]
18번째 과정: [266, 284, 290, 293]
19번째 과정: [299, 303]
20번째 과정: [299, 303, 324]
21번째 과정: [298, 299, 303, 324]
22번째 과정: [266, 284, 290, 293, 293, 298, 299, 303, 324]
23번째 과정: [355, 361, 362]
24번째 과정: [266, 284, 290, 293, 293, 298, 299, 303, 324, 333, 355, 361, 362]
25번째 과정: [223, 234, 248, 255, 256, 258, 266, 284, 290, 293, 293, 298, 299, 303, 324, 333, 355, 361, 362]
26번째 과정: [34, 38, 57, 63, 64, 65, 81, 82, 83, 83, 94, 103, 122, 123, 150, 153, 157, 176, 184, 196, 204, 223, 234, 248, 255, 256, 258, 266, 284, 290, 293, 293, 298, 299, 303, 324, 333, 355, 361, 362]
27번째 과정: [383, 391, 392]
28번째 과정: [383, 391, 392, 402]
29번째 과정: [433, 435]
30번째 과정: [428, 433, 435]
31번째 과정: [428, 433, 435, 436]
32번째 과정: [428, 433, 435, 436, 471, 483]
33번째 과정: [383, 391, 392, 402, 412, 428, 433, 435, 436, 471, 483]
34번째 과정: [34, 38, 57, 63, 64, 65, 81, 82, 83, 83, 94, 103, 122, 123, 150, 153, 157, 176, 184, 196, 204, 223, 234, 248, 255, 256, 258, 266, 284, 290, 293, 293, 298, 299, 303, 324, 333, 355, 361, 362, 365, 383, 391, 392, 402, 412, 428, 433, 435, 436, 471, 483]
35번째 과정: [556, 601]
36번째 과정: [550, 556, 601]
37번째 과정: [526, 550, 556, 601]
38번째 과정: [623, 656]
39번째 과정: [623, 656, 657, 659]
40번째 과정: [666, 669]
41번째 과정: [666, 669, 676]
42번째 과정: [661, 666, 669, 676]
43번째 과정: [623, 656, 657, 659, 659, 661, 666, 669, 676]
44번째 과정: [526, 550, 556, 601, 612, 623, 656, 657, 659, 659, 661, 666, 669, 676]
45번째 과정: [514, 526, 550, 556, 601, 612, 623, 656, 657, 659, 659, 661, 666, 669, 676]
46번째 과정: [514, 526, 550, 556, 601, 612, 623, 656, 657, 659, 659, 661, 666, 669, 676, 681, 694]
47번째 과정: [708, 710, 732]
48번째 과정: [708, 710, 732, 750]
49번째 과정: [789, 813]
50번째 과정: [845, 851]
51번째 과정: [836, 838, 845, 851]
52번째 과정: [789, 813, 830, 836, 838, 845, 851]
53번째 과정: [789, 813, 830, 836, 838, 845, 851, 860]
54번째 과정: [890, 902]
55번째 과정: [871, 882, 890, 902]
56번째 과정: [789, 813, 830, 836, 838, 845, 851, 860, 863, 871, 882, 890, 902]
57번째 과정: [943, 969]
58번째 과정: [929, 943, 969]
59번째 과정: [789, 813, 830, 836, 838, 845, 851, 860, 863, 871, 882, 890, 902, 926, 929, 943, 969]
60번째 과정: [789, 813, 830, 836, 838, 845, 851, 860, 863, 871, 882, 890, 902, 926, 929, 943, 969, 977, 979]
61번째 과정: [789, 813, 830, 836, 838, 845, 851, 860, 863, 871, 882, 890, 902, 926, 929, 943, 969, 977, 979, 985, 986]
62번째 과정: [708, 710, 732, 750, 772, 789, 813, 830, 836, 838, 845, 851, 860, 863, 871, 882, 890, 902, 926, 929, 943, 969, 977, 979, 985, 986]
63번째 과정: [514, 526, 550, 556, 601, 612, 623, 656, 657, 659, 659, 661, 666, 669, 676, 681, 694, 699, 708, 710, 732, 750, 772, 789, 813, 830, 836, 838, 845, 851, 860, 863, 871, 882, 890, 902, 926, 929, 943, 969, 977, 979, 985, 986]
64번째 과정: [34, 38, 57, 63, 64, 65, 81, 82, 83, 83, 94, 103, 122, 123, 150, 153, 157, 176, 184, 196, 204, 223, 234, 248, 255, 256, 258, 266, 284, 290, 293, 293, 298, 299, 303, 324, 333, 355, 361, 362, 365, 383, 391, 392, 402, 412, 428, 433, 435, 436, 471, 483, 490, 514, 526, 550, 556, 601, 612, 623, 656, 657, 659, 659, 661, 666, 669, 676, 681, 694, 699, 708, 710, 732, 750, 772, 789, 813, 830, 836, 838, 845, 851, 860, 863, 871, 882, 890, 902, 926, 929, 943, 969, 977, 979, 985, 986]
65번째 과정: [992, 997]
66번째 과정: [34, 38, 57, 63, 64, 65, 81, 82, 83, 83, 94, 103, 122, 123, 150, 153, 157, 176, 184, 196, 204, 223, 234, 248, 255, 256, 258, 266, 284, 290, 293, 293, 298, 299, 303, 324, 333, 355, 361, 362, 365, 383, 391, 392, 402, 412, 428, 433, 435, 436, 471, 483, 490, 514, 526, 550, 556, 601, 612, 623, 656, 657, 659, 659, 661, 666, 669, 676, 681, 694, 699, 708, 710, 732, 750, 772, 789, 813, 830, 836, 838, 845, 851, 860, 863, 871, 882, 890, 902, 926, 929, 943, 969, 977, 979, 985, 986, 989, 992, 997]
Execution Image