今天又回来学习啦,预计今天完成C的学习,晚上开始学习C++
和大家简单唠唠嗑,因为现在在秋招,我一开始在做图像处理相关的,当初为了偷懒,不想学习C\C++,选择了python学习,学习过python的小伙伴,一定知道,这个是比较简单的,很多已经被做成了函数和库,可是去找图像相关的工作,对学历、算法要求还有不少,于是找工作很不顺利(当然也是自己学的不精),于是准备转找嵌入式相关的,因为我也有1-2年的嵌入式软件相关的编程,但是忘得差不多了,于是从C开始捡。
正在学习的小伙伴也要好好的准备吧,不然以后找工作就很麻烦了,好了,看看今天的。
对了哦,这里还要再说一个,函数封装以后真是太香了,拷贝过来直接使用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996) //注意这一句的使用,可以解决C语言中出现的一些兼容性问题
// 顺序查找(效率低 )查找不稳定
// 在指定范围内寻找和相同的值,找到了返回下标,找不到返回-1
int seq(int *array, int low, int high,int key)
{
int i;
for (i = low; i < high; i++)
{
if (array[i] == key)
return i;
}
return -1;
}
//定义一个打印函数,进行数组打印
void printf_array(int *p, int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("%d ", p[i]);
}
printf("\n");
}
//定义一个地址传递函数,进行大小比较(地址传递)
void swap_array(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
//冒泡核心算法,注意!这里是通过地址进行传递的
void bubble_sort(int *p, int n)
{
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (p[j] > p[j + 1])
{
swap_array(&p[j], &p[j + 1]);
}
}
}
}
// 二分查找,在已经排序的数中查找
int bin(int *array, int low, int high, int key)
{
while (low <= high)//这个和二分法递归是有本质区别的,这个是不停地循环,而递归的终止条件是判断
{
int mid = (low + high) / 2;
if (key == array[mid])//中间切一刀,正好和要查找的数相等
return mid;
else if (key > array[mid])//如果要找的数大于array[mid],那么就在下半部分继续切刀
{
low = mid+1;//注意:为什么这里是加1? 因为:这里写的是向右取值,中间的已经跳过了,所以需要+1
}
else //如果要找的数小于array[mid],那么就在下半部分继续切分
{
high = mid - 1; //注意:为什么这里是减1? 因为:这里写的是向左取值,中间的已经跳过了,所以需要 -1
}
}
return -1;
}
// 二分法查找递归
int bin_rec(int *array, int low, int high, int key)
{
if (low <= high)//递归终止条件
{
int mid = (low + high) / 2;
if (key == array[mid])
return mid;
else if (key > array[mid])
return bin_rec(array, mid + 1, high, key); //在下半部分查找
else
return bin_rec(array, low, mid - 1, key);
}
return -1;
}
void main()
{
int array[10] = { 23,34,45,43,32,21,27,87,65,60 };
bubble_sort(array,10);
printf_array(array,10);
int a = bin_rec(array, 0, 10, 87);
printf("%d\n",a);
system("pause");
}
这个是写的比较多的一个,也有一些注释,大家可以看看!
(完!)