关于选择排序与冒泡排序算法详解
本篇主要应C语言初学者对冒泡排序和选择排序的一个初步介绍和认知
首先我们来认识下选择排序
那什么是选择排序呢?选择排序就是指在一推数组里每一次从待排序的数据元素中选出最小(或最大)的一个元素,放在数组最末的位置(最前面的位置也可以)。以此循环下去,直到全部数据排完。
那我们先来看一下代码
*此处的n为长度,自己掌控
#include <stdio.h>
int main()
{
int i,j,t,a[11]; //定义变量及数组为基本整型
printf("请输入n个数:\n");
for(i=1;i<n;i++)
{scanf("%d",&a[i]); //从键盘中输入要排序的n个数字
printf("%3d",a[i]); //先输出排序前的数组顺序
}
for(i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
if(a[i]>a[j]) //通过i和j的比较大小,如果前大,则交换位置
{
t=a[i]; //常用的交换三连
a[i]=a[j];
a[j]=t;
}
for(i=1;i<=n;i++) // 通过循环输出排序后的数组
printf("%3d", a[i]);
printf("\n");
return 0;
}
这就是选择排序的代码了,具体原理作者如下解释
第一次交换
第二次交换在第一次交换的基础上进行
第三次交换
经过六轮查找后 最大数一直往后靠 结果为:
以上就是选择排序的基本过程了,当然,你也可以比较最小的放在第一位,以此类推,反复练习即可熟练
接下来认识下冒泡排序
所谓的冒泡排序也叫升序排序法,但是相比起二分查找只能应用于有序数列。
相邻的两两个数比较 ,若前者大后者小,则交换。
下面看一下代码
*n为长度自己定义即可
``
#include <stdio.h>
int main()
{
int i,j,t,a[n];
printf("请输入n个数:\n");
for(i=1;i<n;i++)
scanf("%d",&a[i]); //从键盘中输入n个数
for(i=1;i<n-1;i++) //变量i代表比较的趟数
for(j=1;j<n-i;j++) //变最j代表每趟两两比较的次数
if(a[j]>a[j+1])
{
t=a[j]; //产利用中间变童实现两值互换
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序后的顺序是:\n");
for(i=1;i<=n;i++)
printf("% d",a[i]); //将冒泡排序后的顺序输出
return 0;
}
*当然大家可以试一下在函数里写这些排序
下期更新二分查找和插入排序