冒泡排序
排序
从小到大顺序排
轮数
数据个数-1
每一次比较的次数
数据个数 - 1 - 当前的轮数
每次比较开始从下标为0的地方开始比较
轮数:0 ~ < 数据个数 - 1
次数:0 ~ < 数据个数 - 1 - 当前的轮数
代码思路
1、定义数组 --- 一维数组
2、求数组中数据的个数
3、轮数: 数据个数 - 1
4、
for() { for() { 如果 前面的数据 > 后面的数据 { 交换 } } }
5、将排序后的数据统一输出验证
代码:
#include <stdio.h>
int main() {
int a[] = {100, 46, 482, 334, 786};
int len = sizeof(a) / sizeof(a[0]); // 数据个数
int i, j;
int temp;
printf("通过冒泡排序后,数组内的值排序为(降序):");
// 冒泡排序(降序) //要是想从小到大,只用将 a[j] < a[j + 1]改为大于号就行
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - 1 - i; j++) // 注意这里要减去i,因为每轮过后,最大的元素会被放在正确的位置
{
if (a[j] < a[j + 1]) // 保持这个条件以进行降序排序
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
// 排序完成后,打印数组
for (i = 0; i < len; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
二分查找
什么是查找算法
在有序的数组内进行查找
什么是二分查找
在有序的数组里面折半查找某一个目标数据
代码思路
#include <stdio.h>
int main(void)
{
// 有序的数组
// 目标数据
// 定义 low high mid
// low = 0 high = sizeof(数组名) / sizeof(数组名[0]) - 1
// 如果 low <= high
// mid = (low + high) / 2;
// 数组名[mid] 目标数据对比
// 数组名[mid] > 目标数据 --- 要查找的数据在左边 --> high = mid - 1
// 数组名[mid] < 目标数据 --- 要查找的数据在右边 --> low = mid + 1
// 数组名[mid] == 目标数据 --- 找到数据则结束查找,打印mid
// 如果 low > high --> 结束查找,输出没有该数据
return 0;
}
代码:
#include<stdio.h>
int main(void)
{
int arr[] = {2,3,8,9,12,18,35,40};
int n = 40;
int low,high,mid; // 下标
low = 0;
high = sizeof(arr) / sizeof(arr[0]) - 1;
while(1)
{
if(low <= high)
{
mid = (low+high) / 2;
if(arr[mid] > n)
{
high = mid - 1;
}
else if(arr[mid] < n)
{
low = mid + 1;
}
else if(arr[mid] == n)
{
printf("找到了,%d",mid);
break;
}
}
else
{
printf("找不到");
break;
}
}
return 0;
}