|
2 | 2 |
|
3 | 3 | #define length_of_array(array) sizeof(array) / sizeof(array[0]) |
4 | 4 |
|
5 | | -#if defined DEBUG |
6 | 5 | static int reverse_times = 0; |
7 | | -#endif |
8 | 6 |
|
9 | 7 | // #define REC_IMP |
10 | 8 | #ifndef REC_IMP |
11 | 9 | #define NO_REC_IMP |
12 | 10 | #endif |
13 | 11 |
|
| 12 | +static size_t *result_p; |
| 13 | + |
14 | 14 | // generic |
15 | 15 | int reverse_array(void *array, size_t len, size_t elem_byte_size, |
16 | 16 | int (*swap_function)(const void *a, const void *b)) { |
@@ -56,7 +56,11 @@ int pancakeSort(void *unsorted_array, size_t len, size_t elem_byte_size, |
56 | 56 | for (; unsorted_len > 0; unsorted_len--) { |
57 | 57 | max_elem = find_max_elem(unsorted_array, unsorted_len, elem_byte_size, |
58 | 58 | compare_int); |
| 59 | + result_p[reverse_times] = max_elem + 1; |
| 60 | + reverse_times++; |
59 | 61 | reverse_array(unsorted_array, max_elem + 1, elem_byte_size, swap_int); |
| 62 | + result_p[reverse_times] = unsorted_len; |
| 63 | + reverse_times++; |
60 | 64 | reverse_array(unsorted_array, unsorted_len, elem_byte_size, swap_int); |
61 | 65 | } |
62 | 66 | return 0; |
@@ -86,8 +90,18 @@ int pancakeSort(void *unsorted_array, size_t len, size_t elem_byte_size, |
86 | 90 | #endif |
87 | 91 |
|
88 | 92 | int main() { |
89 | | - int array1[] = {5, 2, 1, 0, 3, 2, 9}; // {5,2,1,0,3,2*,9} => {0,1,2,2*,3,5,9} |
| 93 | + int array1[] = {5, 2, 1, 0, |
| 94 | + 3, 2, 9}; // want: {5,2,1,0,3,2*,9} => {0,1,2,2*,3,5,9} |
90 | 95 | size_t i; |
91 | | - size_t result[length_of_array(array1)*2]; |
92 | | - |
| 96 | + size_t result[length_of_array(array1) * 2]; |
| 97 | + result_p = result; |
| 98 | + pancakeSort(array1, length_of_array(array1), sizeof(int) / sizeof(char), |
| 99 | + compare_int, swap_int); |
| 100 | + printf("k值序列:"); |
| 101 | + for (i = 0; i < reverse_times; i++) { |
| 102 | + printf("%zu ", result[i]); |
| 103 | + } |
| 104 | + printf("\n排序结果:"); |
| 105 | + for (i = 0; i < length_of_array(array1); i++) |
| 106 | + printf("%d ", array1[i]); |
93 | 107 | } |
0 commit comments