冒泡排序
比如有一个长度为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; }