练习题
标题
杨氏矩阵
内容
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
要求
时间复杂度小于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*