LeetCode 煎饼排序 C语言

本文介绍了一种类似于选择排序的翻转排序算法实现方法。该算法通过找到未排序部分的最大值,并通过两次翻转操作将其放置到正确的位置来完成排序过程。文章详细展示了算法的具体步骤及其实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值