思路 有点类似选择排序,每次找到最大的那个位置max,下标在max之前的进行一次reverse,这样最大的元素就到了第一个位置,再将长度设为为距离最后一位未排序的位置再reverse,最大元素就变成了未排序的最后一位,即每次在未排序的序列中找到最大的元素进行两次reverse放到最后
void reverse(int *A
, int n
){
for(int i
=0; i
<n
/2; i
++){
int temp
= A
[i
];
A
[i
] = A
[n
-1-i
];
A
[n
-1-i
] = temp
;
}
}
int* pancakeSort(int* A
, int ASize
, int* returnSize
){
int *k
= (int *)malloc(10*ASize
*sizeof(int));
int p
= 0;
for(int j
=ASize
-1; j
>=0; j
--){
int max
= 0;
for(int i
=0;i
<=j
;i
++){
if(A
[i
] > A
[max
]){
max
= i
;
}
}
if(max
!= j
){
reverse(A
, max
+1);
k
[p
++] = max
+1;
reverse(A
, j
+1);
k
[p
++] = j
+1;
}
}
*returnSize
= p
;
return k
;
}
转载请注明原文地址: https://win8.8miu.com/read-12586.html