数据结构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;
}

  

原文地址:https://www.cnblogs.com/jerryleesir/p/13409688.html