Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5af6c04

Browse files
Improvement
Signed-off-by: begeekmyfriend <begeekmyfriend@gmail.com>
1 parent 4dbb91b commit 5af6c04

File tree

1 file changed

+61
-7
lines changed

1 file changed

+61
-7
lines changed

‎0912_sort_an_array/sort.c‎

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
static void show(int *nums, int lo, int hi)
66
{
7-
int i;
8-
for (i = lo; i <= hi; i++) {
9-
printf("%d ", nums[i]);
10-
}
11-
printf("\n");
7+
int i;
8+
for (i = lo; i <= hi; i++) {
9+
printf("%d ", nums[i]);
10+
}
11+
printf("\n");
1212
}
1313

1414
static inline void swap(int *a, int *b)
@@ -52,16 +52,70 @@ static void quick_sort(int *nums, int lo, int hi)
5252
quick_sort(nums, i + 1, hi);
5353
}
5454

55+
static void merge(int *nums, int lo, int mid, int hi)
56+
{
57+
int i, j, k, size = hi - mid;
58+
int *tmp = malloc(size * sizeof(int));
59+
60+
for (j = 0; j < size; j++) {
61+
tmp[j] = nums[mid + 1 + j];
62+
}
63+
64+
i = mid;
65+
j = size - 1;
66+
k = hi;
67+
while (i >= lo && j >= 0) {
68+
if (tmp[j] >= nums[i]) {
69+
nums[k--] = tmp[j--];
70+
} else {
71+
nums[k--] = nums[i--];
72+
}
73+
}
74+
75+
while (j >= 0) {
76+
nums[k--] = tmp[j--];
77+
}
78+
79+
free(tmp);
80+
}
81+
82+
static void merge_sort(int *nums, int lo, int hi)
83+
{
84+
int mid;
85+
86+
if (lo >= hi) {
87+
return;
88+
}
89+
90+
mid = lo + (hi - lo) / 2;
91+
92+
merge_sort(nums, lo, mid);
93+
merge_sort(nums, mid + 1, hi);
94+
95+
merge(nums, lo, mid, hi);
96+
}
97+
98+
int *sortArray(int *nums, int numsSize, int *returnSize)
99+
{
100+
#if 1
101+
quick_sort(nums, 0, numsSize - 1);
102+
#else
103+
merge_sort(nums, 0, numsSize - 1);
104+
#endif
105+
*returnSize = numsSize;
106+
return nums;
107+
}
108+
55109
int main(int argc, char **argv)
56110
{
57111
int i, count = argc - 1;
112+
int ret_size = 0;
58113
int *nums = malloc(count * sizeof(int));
59114
for (i = 0; i < count; i++) {
60115
nums[i] = atoi(argv[i + 1]);
61116
}
62117

63-
quick_sort(nums, 0, count - 1);
64-
show(nums, 0, count - 1);
118+
show(sortArray(nums, count, &ret_size), 0, ret_size - 1);
65119

66120
return 0;
67121
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /