zoukankan      html  css  js  c++  java
  • 数据结构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;
    }
    

      

  • 相关阅读:
    MFC工作者线程
    【转】水煮TCPMP
    TCPMP的ARM编译器问题
    奇怪的链接警告-ole32.lib
    Stack overflow错误的一个原因
    旋转wince的桌面的函数
    ASNI to Unicode 转换与系统语言的问题
    WinCE 驱动开发问题精华集锦
    【转】OAL之系统时钟
    【转】蓝牙技术及其系统原理
  • 原文地址:https://www.cnblogs.com/jerryleesir/p/13409688.html
Copyright © 2011-2022 走看看