数据结构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())!='\n')
{
k[n++] = c-'0';
}
if (c == '\n')
{
k[n] = '\0';
}
//冒泡排序
bubblesort(k , n-1);
printf("这串数字从小到大为:");
for (size_t i = 1; i <= n-1; i++)
{
printf("%d",k[i]);
}
return 0;
}

浙公网安备 33010602011771号