数组排序篇:打擂台排序法(内附详细思路和完整代码实现过程)

何为打擂台排序法?

        打擂台排序法:把一个数据比作一个人,人与人之间的单挑,即为数据之间大小值的比较。一个数据同多个数据进行比较,类似于打擂台。

排序思路  

        假设我的数组排序是从小到大的排序,例如第一个数据A比第二个数据B大,我们就使其进行数值交换(这里我们要定义一个局部变量来存原先的值)。

注意:我们此时只是交换数据,没有偏移或者交换数组的下标!

那么我们在交换完数据后,第一个数据变为B,此时我们需要一个偏移,让第一个数据继续与其他数据进行比较。

我的设计的理念:只要是比第一个数据大的就进行数据交换。

当第一个数据与所有数据比较完后,就可以确保了第一个数据为最小数值。此时我们只是确定了第一个数据是最小值,我们通过数据偏移让第二个数据与第三个,第四个,第五个.....进行比较,以此类推,我们走完程序,就相当于每一个数据都进行了一个打擂台的循环。

缺点:打擂台方式的比较的次数太多,代码执行效率不高,能够实现数组的数据排序.

完整代码实现效果

#include <stdio.h>

int main()
{
    int a[10] = {1, 10, 4, 11, 34, 2, 12, 45, 6, 3};
    int num = 1;

    for (int n = 0; n <= 9; n++)
    {
        for (int j = n; j <= 9; j++)
        {
            if (a[n] > a[j]) // 大变小
            {
                int tmp = a[n];
                a[n] = a[j];
                a[j] = tmp;
                for (int n = 0; n <= 9; n++)
                {
                    printf("%d ", a[n]);
                }
                printf("%20d次", num++);
                printf("\n");
            }
        }
    }
    for (int n = 0; n <= 9; n++)
    {
        printf("%d ", a[n]);
    }
    printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值