指针的进阶

在这里插入图片描述

练习题

标题
杨氏矩阵

内容
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

要求
时间复杂度小于O(N);

参考答题

//思路:
//因为右方和下方的数一定比较大
//所以可以从右上角开始找
//如果所找的数比较大,则向下;比较小,则向左,这样就可以找完。
//而且最多只找向下y + 向左x -1 次,(画图即可理解),符合题目要求的0(N)

int findnum(int a[][3], int x, int y, int f)
{
   
	int i = 0; 
	int j = x - 1;//从左上角开始遍历

	while (j >= 0 && i < y)
	{
   
		//比我大就向下
		if (a[i][j] < f)
		{
   
			i++;
		}

		//比我小就向左
		else if (a[i][j] > f)
		{
   
			j--;
		}

		//相等返回1
		else
		{
   
			return 1;
		}
	}

	//找不到返回0
	return 0;

}

int main()
{
   
	//测试一组数据
	int a[][3] = {
    {
   1,3,5},{
   3,5,7},{
   5,7,9} };
	
	if (findnum(a, 3, 3, 2))
	{
   
		printf("It has been found!\n");
	}
	else
	{
   
		printf("It hasn't been found\n");
	}

	return 0;

}

利用冒泡排序模拟实现快速排序函数qsort()

#include<stdio.h>
void _swap(void* p1, void* p2, int size)
{
   
	int i = 0;
	for (i = 0; i < size;i++)
	{
   
		char tmp = *((char*)p1 + i);
		*((char*)p1 + i) = *((char*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值