昨天我们学习求数组和、最大值、最小值等等,那么我们今天继续昨天的学习没我们先来看看今天的学习目标有哪些:
- 冒泡排序
- 顺序查找
- 冒泡排序
说到冒泡排序我们要先了解一下什么是排序(将无序的序列排列成有序的序列)
其次就是排序的分类有哪些?(交换排序(冒泡排序)、选择排序、插入排序、归并排序)
而我们今天需要学习的冒泡排序的思想是什么呢?(两两比较、逆序交换)
换而言之冒泡排序算法的运作如下:(从小到大)
(1)比较相邻的元素。如果第一个比第二个大,则交换。
(2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。
(3)针对所有的元素重复以上的步骤。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
二、循序查找
什么是循环查找(查询特定关键字是否在表中)
查找有几种结果?(查找成功or查找失败)
什么是顺序查找?(选择你要查询的数据,与数组中所有元素逐一比较)
例:
分析:循环该过程(注意初始值“0”,判断条件<10 步长值x++)
循环体则是if(17==arr[ x ]{ printf(“查找成功,在第&d个位置”,x+i }(注意此处的若是求我们常规意义上的位置,则是从1开始数所以要往后加一个1)
若是失败我们则要思考两个方面:
- 下标
- 计数器
//具体实例
#include<stdio.h>
vodi main()
{
int a[10] = {11,12,13,14,15,16,17,18,19,20}
int i;
for(i=0;i<10;i++)
{
if(a[i]==17)
{
printf(查找成功,在第&d位置\n",i+1);
break;
}
}
那么到这里就完成了我们今天数组的学习,也是完成了一维数组的所有学习,明天我们将进入到二维数组的学习。下面我会给大家归类一下我们可以用到的代码格式以及思维导图我也会放在下边,大家可以自行参考,谢谢!
1、迁移新数组
int b[100] , k=0; //k是新数组b的长度 也是下标 要初始化为0
for(i=0; i<n; i++)
{
if(条件)
{
b[k] = a[i];
k++;
}
}
2、查找
①统计个数
for(i=0; i<n; i++)
{
if(条件)
{
count++;
}
}
if(count==0)
{
失败
}
else
{
输出个数count
}
②第一次出现的位置
for(i=0; i<n; i++)
{
if(条件)
{
count++;
if(count==1)
{
xb=i; //xb为下标
}
}
}
if(count==0)
{
失败
}
else
{
输出位置
}
③最后一次出现的位置
for(i=0; i<n; i++)
{
if(条件)
{
count++;
xb=i; //xb为下标
}
}
if(count==0)
{
失败
}
else
{
输出位置
}
3、排序
for(i=1; i<n; i++) //外层控制【趟数】 【N个数排序N-1趟】
{
for(j=0; j<n-i; j++) //内层循环控制【每一趟的比较下标】
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
①正常输出
for(i=0; i<n; i++)
{
printf("%d " , a[i]);
}
②排序后,将最大值和最小值去掉,再输出
for(i=0+1; i<n-1; i++)
{
printf("%d " , a[i]);
}
③从小到大排序后,输出最大值和第二大的值
printf("最大值%d 第二大值%d" , a[n-1] , a[n-2]);
printf("最小值%d 第二小值%d" , a[0] , a[1]);
注意:
整型数组排序 int i , j , t;
实型数组排序 int i , j; float t;