- 思路
有点类似选择排序,每次找到最大的那个位置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;
}