• 数据结构C语言实现----冒泡排序


    冒泡排序

      比如有一个长度为10的数字串,用冒泡排序从小到大

      两个一组两个一组的比较

      比如第一个和第二个比较,如果后者比前者小,就交换位置,如果后者比前者大,什么都不做

      之后再第二个和第三个比较,第三个和第四个比较。。。。

      最后,这10个数中最大的数就被放到了最后面,也就是第十个位置

      然后重复上面的操作,把剩下的最大的数放到第九个位置。。。

    注意:如果进行在其中一步中,所有的数字进行比较后都没有交换位置,说明这串数字已经是有序数字串了,就不用再做比较了

    运行结果:

    源码如下:

    #include<stdio.h>
    typedef int keytype;
    //冒泡排序
    void bubblesort(keytype k[] , int n)
    {
        int first;//比较元素
        int second;//比较元素
        int flag = 1;//判断是否继续比较,0继续比较,1停止比较
        for (size_t i = n; i >=1 && flag == 1; i--)
        {
            first = 1;
            second = 2;
            flag = 0;
            while (second<=i)
            {
                if (k[second++] < k[first++])//交换
                {
                    k[0] = k[second-1];
                    k[second-1] = k[first-1];
                    k[first-1] = k[0];
                    flag = 1;
                }
            }
        }
    }
    #define MAX 100
    int main()
    {
        //读取一串数字
        printf("请输入一串无序数字:");
        int c;
        int n = 1;
        keytype k[MAX];
        while ((c = getchar())!='
    ')
        {
            k[n++] = c-'0';
        }
        if (c == '
    ')
        {
            k[n] = '';
        }
        //冒泡排序
        bubblesort(k , n-1);
        printf("这串数字从小到大为:");
        for (size_t i = 1; i <= n-1; i++)
        {
            printf("%d",k[i]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    HDU 1540 Tunnel Warfare (线段树区间合并)
    P2258 子矩阵
    P5021 赛道修建
    P4084 [USACO17DEC]Barn Painting
    P3914 染色计数
    比赛用模板
    P3594 [POI2015]WIL-Wilcze doły
    P5022 旅行
    P3952 时间复杂度
    P3960 列队
  • 原文地址:https://www.cnblogs.com/jerryleesir/p/13409688.html
Copyright © 2020-2023  润新知