LeetCode 煎饼排序 C语言

it2022-05-05  151

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

最新回复(0)