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

3 篇文章 0 订阅
2 篇文章 0 订阅

编程之美书中讲的一摞烙饼的排序一题
这里无法用基本的排序方法对其排序,那么最直接的方法是找出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);
        }
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值