十.000

二分查找

二分查找是通过创建中间值将待查找的区间分成两部分并只取一部分继续查找。

#include<stdio.h>
int main()
{
	int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
	int k = 8;//要查找的数
	int sz = sizeof(arr) / sizeof(arr[0]);//sz是元素个数
	int zuo = 0;//左下标
	int you = sz - 1;//右下标就是元素个数-1
	while (zuo <= you)
	{
		int min = (zuo + you) / 2;//min是中间元素
		if (arr[min]> k)//中间元素大于要找的数
		{
			you = min  -1;//改变右下标
		}
		else if (arr[min]<k)//中间元素小于找的数
		{
			zuo = min + 1;//改变左下标
		}
		else//这里就是中间元素等于要找的数了
		{
			printf("%d\n", min);
			break;
        }
	}
	if (zuo > you)
	{
		printf("找不到\n");
	}
}

冒泡排序

冒泡排序是对于一组要排序的元素列,从第一个元素开始依次比较相邻的两个数,将较小的数放到前面,大的数放到后面,直到比较到最后两个数,小数放前,大数放后,一趟后元素中最大的数就会在最后,重复步骤,直至排序完成。

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	int arr[10] = { 3,5,6,8,9,1,4,2,7,0};
	int sz = sizeof(arr)/sizeof(arr[0]);//sz是元素个数
	int biaoz = 0;//标记
	for (i = 0; i < sz - 1; i++)//外层循环,sz-1是表示要计较多少趟
	{
		for (j = 0; j < sz-1 - i; j++)//比较完一趟就会少一个数所以-i
		{
			if (arr[j] > arr[j + 1])//比较两个数,左边比右边大就交换
			{
				int a = arr[j];
			    arr[j] = arr[j + 1];
				arr[j + 1] = a;
				biaoz = 1;//进行了交换,不是有序的biaoz设置为1

			}
		}
		if (biaoz == 0;)//没有发生交换,break跳出循环
		{
			break;
		}
	}
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}

选择排序

选择排序是从待排序的元素中选出最小或者最大的一个元素放到序列的最起始位置,然后从剩余的元素中找到最小或最大的元素继续放在起始位置。

#include<stdio.h>
int main()
{
	int arr[] = { 4,3,8,9,0,1,2,6,7,5 };
	int i = 0;
	int j = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		for (j =i+1;j<sz;j++)
		{
			if (arr[i] > arr[j])
			{
				    int a = arr[i];
					arr[i] = arr[j];
					arr[j] = a;
			}
		}
	}
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}

插入排序

#include<stdio.h>
int main()
{
	int arr[] = { 3,5,1,9,0,6,4,2,7,8 };
	int i = 0;
	int j = 0;
	int z = 0;
	for (i = 1; i < 10; i++)
	{
		z = arr[i];
			for (j = i - 1; j >= 0 && arr[j] > z; j--)
			{
				arr[j + 1] = arr[j];
				arr[j] = z;
			}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ",arr[i]);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值