插入排序
思想:(在有序数列中)找一个合适的位置,插入
总结:
数组概念
数组定义
数组给值
初始化
赋值
输入
算法
a.找一个数
b.求极值
c.逆序
d.排序
选择
插入
冒泡
e.变长数组 ※※
int n = 10;
scanf("%d",&n);
int a[n]; //不能初始化
-----------------------------------------------
查找:
二分查找(折半查找)
前提:
数据必然有序
思想:
一维字符型数组:
字符数据:
unsigned char s[10];
unsigned char s[10] = {'h','e','l','l','o'}; //数组考虑
最主要: "english" //字符串常量
· //存储时,是按照字符数组的形式存储
字符数组:主要作用 是处理字符串
"hello" -->unsigned char s[10] ={'h','e','l','l','o','\0'};
'\0'//代表结束标志
字符串一定需要'\0'结束标志
有'\0'字符串
无 则叫做字符数组
pay attention to:
1.字符串 --更加注重整体 非单个字符
2.字符串的结束标志 比较重要,表示字符串结束 '\0'
3.处理字符串时,常常使用
int puts(const char*s);
功能:输出字符串
参数:&s 字符串所在空间的首地址
返回值:
int 成功》0
失败-1
char *gets(char*s);
功能:输入字符串
参数:&s 存放字符串一块内存空间
返回值:表示的是存储字符串那块空间首地址
char s[10];
//h e l l o '\0' x x x x
puts(s);//hello
字符串的长度? //'\0' 前面有效字符的个数
//h e l l o '\0' //5就是该字符串的长度
C语言中不能整体赋值
char *strcpy(char *dest, const char *src);
功能:
实现字符串拷贝
参数:
@dest 目标字符串
@src 源字符串
返回值:
成功 返回的是 dest地址
失败 NULL
对排序进行总结
选择排序
1
选择排序算法是通过遍历数组,选择出数组的最小或最大值,与指定位置交换数据,遍历完整个数组的所有位置就完成排序
- 遍历第一趟数组,找出数组的最小值,与第一个数据交换
- 遍历第二趟数组,继续找出最小值,与第二个数据交换
- 重复上述动作,遍历完数组就得到一个有序数组
冒泡排序
对数组进行遍历,每次对相邻两个进行比较大小,若大的数值在前面则交换位置(升序),完成一趟遍历后数组中最大的数值到了数组的末尾位置,再对前面n-1个数值进行相同的遍历,一共完成n-1次遍历就实现了排序完成
- 第一趟对
0~n-1
遍历,依次对比前后的大小,若是不满足前小后大就交换,此时最大的数就被挪到了最后一个位置 - 对
0~n-2
遍历,继续比较前后大小,此时前n-2
个数中最大的数就到了倒数第二个位置 - 重复上述动作继续遍历,每一次都将最大的数向后挤,直到遍历完毕排序成功
插入排序(军训排队大的站前面)
第一个for 为趟数,一共要进行几趟下面的程序;
中间让 t=a[j] i = j;目的是当下面进行比较时,可以让a[j]保留下最后,再赋值给比较后空出来的位置,也就是后面的a[i]=t; 因为 --i ,此时的a[i]刚好为适合t的那个位置;
而while则是让新来的数与里面新数组的末位数进行比较;真则进行里面的交换程序;(比较后最初的a[i]较小,则将与之比较的数放到现在的a[i],而最初的a[i]也就是t,赋值给被比较的数的位置),后若还小则继续往前比较;
而刚开始的i>0,则是让第一个a[0]直接放入新的数组中;