依次把最大找到,翻到最上面,再翻到最下面
LinkedList
<Integer
> res
= new LinkedList
<>();
List
<Integer
> pancakeSort(int[] cakes
) {
sort(cakes
, cakes
.length
);
return res
;
}
void sort(int[] cakes
, int n
) {
if (n
== 1) return;
int maxCake
= 0;
int maxCakeIndex
= 0;
for (int i
= 0; i
< n
; i
++)
if (cakes
[i
] > maxCake
) {
maxCakeIndex
= i
;
maxCake
= cakes
[i
];
}
reverse(cakes
, 0, maxCakeIndex
);
res
.add(maxCakeIndex
+ 1);
reverse(cakes
, 0, n
- 1);
res
.add(n
);
sort(cakes
, n
- 1);
}
void reverse(int[] arr
, int i
, int j
) {
while (i
< j
) {
int temp
= arr
[i
];
arr
[i
] = arr
[j
];
arr
[j
] = temp
;
i
++; j
--;
}
}
转载请注明原文地址:https://tech.qufami.com/read-20413.html