1.选择排序:
工作原理:
首先在未排序的序列中找到最小值,存放在排序序列起始位置,再从剩下的未排序序列中找最小值,排列在已排序序列的末尾,直至所有元素排序完毕。
算法描述:
起始状态:有序区间为0;无序区间为[1,n];
第i次排序:有序区间为[1,i],无序区间为[i,n];无序区间中的第i个最小值,放在有序区间的最后一位;有序区间加1;无序区间减1;n-1次排序后,数据有序,排列完毕。
实验步骤:
1.定义变量,用一个for循环输入需要排序的12个数;
2.再用两个for循环将两个数比大小,如果前一个数比后一个数大,则利用中间变量t将其调换位置;
3.最后再用一个for循环将排序后的数列输出。
注意事项:
*定义数组时,数组里面的值需比所需排列的数的值大;
*输入时需要用取地址符&,输出时不需要用取地址符&;
*n个数据需要排列n-1次。
2.冒泡排序:
工作原理:
重复走访需要排序的数列,一次比较两个数,如果它们的大小顺序错误,则调换顺序,使数据从小到大依次排列,直到没有需要调换的数据为止,则数据已排列完成。
算法描述:
比较相邻的元素,如果第一个比第二个数大,则交换两者的位置;在一趟比较中,对相邻的元素重复以上操作,则第一位为最小值,最后一位为最大值;接下来在每一趟中重复以上操作,直到排序完成。
实验步骤:
- 定义变量,n代表比较的趟数,m代表每趟两两比较的次数;
- 用一个for循环输入10个数,接着再用2个for循环,中间变量t进行两两比较,最后再用一个for循环将排序后的序列输出;
- 排序完成。
注意事项:
*定义变量为整型;
*明白变量n,m的意义;
*正确运用for循环进行输入,输出,比较等;
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,m,t,a[13]; //定义变量,数组为整形;
for(n=1;n<=12;n++)
scanf("%d",&a[n]); //输入12个数据;
for(n=1;n<=11;n++)
for(m=n+1;m<=12;m++)
if(a[n]>a[m]) //如果前一个数比后一个数大,利用中间变量将两数调换位置;
{
t=a[n];
a[n]=a[m];
a[m]=t;
}
for(n=1;n<=12;n++)
printf("%5d",a[n]); //输出排列好的12个数据;
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
int n,m,t,a[11]; //定义变量及数组为基本整型;
printf("请输入10个数:\n");
for(n=1;n<11;n++)
scanf("%d",&a[n]); //从键盘中输入10个数;
for(n=1;n<10;n++) //变量n代表比较的趟数;
for(m=1;m<11-n;m++) //变最m代表每趟两两比较的次数;
if(a[m]>a[m+1])
{
t=a[m]; //产利用中间变童实现两值互换;
a[m]=a[m+1];
a[m+1]=t;
}
printf("排序后的顺序是:\n");
for(n=1;n<=10;n++)
printf("%5d",a[n]); //将冒泡排序后的顺序输出;
printf("\n");
return 0;
}