1.调整数组使奇数全部都位于偶数前面。
要求:
输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void MoveArr(int *str, int size)
{
int *p1 = str;
int *p2 = str;
int a = 0;
int tmp = 0;
int i = 0;
assert(str != NULL);
for (i = 0; i < size; i++)
{
if (*p1 % 2 != 0)
{
p1++;
p2++;
}
else
break;
}
while (p2 != (str + size))
{
if ((*p2) % 2 != 0)
{
a = p2 - p1;
for (i = 0; i < a; i++)
{
tmp = *(p2 - i);
*(p2 - i) = *(p2 - i - 1);
*(p2 - i - 1) = tmp;
}
p1++;
}
p2++;
}
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int sz = sizeof(arr) / sizeof(arr[0]);
MoveArr(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
2.杨氏矩阵
有一个二维数组:数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N)。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define COL 3
int is_find(int a[][COL], int size, int input)
{
int i = 0;
int j = COL - 1;
while (i<size&&j>=0)
{
if (a[i][j]>input)
j--;
else if (a[i][j] < input)
i++;
else
return 1;
}
return 0;
}
int main()
{
int a[][3] = {{ 1, 2, 3 },{ 2, 3, 4 }, { 3, 4, 5 } };
int size = sizeof(a) / sizeof(a[0]);
int input = 14;
int b=is_find(a,size,input);
if (b == 1)
printf("已找到");
else
printf("这个数不存在!");
system("pause");
return 0;
}