10个数比大小(排序)——冒泡和选择
一. 冒泡法(起泡法)
-
冒泡排序的基本概念是(以升序排序为例):
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
2.代码
#include<stdio.h>
int main()
{
void comp(int a[]);//声明函数
int a[10];
printf("please input 10 numbers:");//输入
for (int i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
comp(a);//调用函数
printf("The right number:");//输出
for (int i = 0; i < 10; i++)
{
printf("%3d", a[i]);
}
return 0;
}
void comp(int a[])//定义函数
{
int i, j, k;
for ( i = 0; i < 9; i++)
{
for (j = 0; j < 9 - i; j++)
{
if (a[j]>a[j+1])
{
k = a[j]; a[j] = a[j + 1]; a[j + 1] = k;
}
}
}
}
3.运行结果
二.选择法
1.选择排序(从小到大)的基本思想是,
首先,选出最小的数,放在第一个位置;
然后,选出第二小的数,放在第二个位置;
以此类推,直到所有的数从小到大排序。
——————————————————————
下面,以对 3 2 4 1 进行选择排序说明排序过程,使用comp(定义的函数) 记录当前最小的数所在的位置。
第1轮 排序过程 (寻找第1小的数所在的位置)
3 2 4 1(最初, comp=1)
3 2 4 1(3 > 2, 所以comp=2)
3 2 4 1(2 < 4, 所以 comp=2)
3 2 4 1(2 > 1, 所以 comp=1, 这时候确定了第1小的数在位置4)
1 2 4 3 (第1轮结果,将3和1交换,也就是位置1和位置4交换)
第2轮 排序过程 (寻找第2小的数所在的位置)
1 2 4 3(第1轮结果, comp=2,只需要从位置2开始寻找)
1 2 4 3(4 > 2, 所以comp=2)
1 2 4 3(3 > 2, 所以 comp=2)
1 2 4 3(第2轮结果,因为comp位置刚好在第2个位置,无需交换)
第3轮 排序过程 (寻找第3小的数所在的位置)
1 2 4 3(第2轮结果, comp=3,只需要从位置2开始寻找)
1 2 4 3(4 > 3, 所以comp=3)
1 2 3 4(第3轮结果,将3和4交换,也就是位置4和位置3交换)
至此,排序完毕。(文字部分有转载 有所修改)
2.代码
#include<stdio.h>
int main()
{
void comp(int a[]);//声明函数
int a[10];
printf("please input 10 numbers:");//输入
for (int i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
comp(a);//调用
printf("The right number:");//输出
for (int i = 0; i < 10; i++)
{
printf("%3d", a[i]);
}
return 0;
}
void comp(int a[])//定义
{
int i, j, k, t;
for (i = 0; i < 9; i++)
{
k = i;
for (j = i + 1; j < 10; j++)
{
if (a[j] < a[k])
{
k=j ;
}
}t = a[k]; a[k] = a[i]; a[i] = t;
}
}
3.运行结果