编程之美学习笔记之一摞烙饼的排序

编程之美书中讲的一摞烙饼的排序一题 这里无法用基本的排序方法对其排序,那么最直接的方法是找出N个数种最大者,将这通过两次翻转放置到最底部,然后处理N-1,,N-2等,直到全部排序完,所以一共需要交换2(N-1)次

void reverse(int cakes[], int beg, int end){int temp;while(beg < end){temp = cakes[beg];cakes[beg++] = cakes[end];cakes[end–] = temp;}}void cake_sort(int cakes[], int n){int ith, max_idx, cur_max, idx;for(ith=n-1; ith>=1; –ith){cur_max = cakes[0];max_idx = 0;//目的找到目前最大的那个饼for(idx=1; idx<=ith; ++idx){if(cakes[idx] > cur_max){cur_max = cakes[idx];max_idx = idx;}}if(max_idx != ith){reverse(cakes, 0, max_idx);reverse(cakes, 0, ith);}}}

怠惰是贫穷的制造厂。

编程之美学习笔记之一摞烙饼的排序

相关文章:

你感兴趣的文章:

标签云: