【C/C++】冒泡排序与二分查找

冒泡排序:就是相邻两个数进行比较,如果a>b(或者a<b)则交换值,每次把一个最大(或者最小)的值往后推。


二分查找:每次取头和尾的中间下标的值a与目标值b进行比较,如果a>b表示目标值b在中间下标前面,把头指向中间下标的前一位;如果a<b表示目标值b在是中间下标后面,把尾指向中间下标的后一位;如果a==b则返回中间下标。查找失败返回-1。


1.随机初始化一个指定长度的数组。

2.对数组进行排序。

3.输入一个值,并查找该值在数组中的下标。

#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      

// 冒泡排序
void sort(int arr[], int length){
	for (int i = 0; i < length -1; ++i)
	{
		for (int j = 0; j < length - 1 - i;++j) //每次把一个最大的值往后推
		{
			if (arr[j]>arr[j+1])
			{
				// 变换两个变量的值
				arr[j] = arr[j] ^ arr[j+1];
				arr[j+1] = arr[j] ^ arr[j+1];
				arr[j] = arr[j] ^ arr[j+1];
			}
		}
	}
}

// 二分查找法(注意:二分查找法只能在有序的数组中使用)
int search(int arr[], int length, int target){

	int head = 0;
	int tail = length -1;

	for (int count = 1,center = 0;head <= tail; ++count)
	{
		printf("第%d次迭代\n",count);
		center = (head+tail)/2;
		if (arr[center] < target)
		{
			head = center + 1; // 把头移到中间下标的后一个位置
		}else if(arr[center] > target){
			tail = center - 1; // 把尾移到中间下标的前一个位置
		}else{
			return center;
		}
	}
	return -1;
}

void printArr(int arr[], int length){
	for (int i = 0; i
      
      
     
     
    
    
   
   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值