1.数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
实现一个函数,来调整该数组中数字的顺序使得
#include <stdio.h>
void Adjust(int arr[],int len)
{
int i, j;
for (i = 0; i < len; i++) //遍历数组
{
if ((arr[i]%2)==0) //判读奇偶
for (j = i + 1; j < len; j++) //从偶数所在位置向数组末尾扫描
{
int temp;
if ((arr[j] % 2) == 1)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
break;
}
}
}
}
int main()
{
int i;
int arr[] = { 1, 10,3, 5, 7, 9, 2, 4, 6, 8, 11 };
Adjust(arr, sizeof(arr) / sizeof(arr[0]));
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%3d", arr[i]);
}
printf("\n");
return 0;
}
2.杨氏矩阵查找数字
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
1 3 4
2 4 5
4 5 6
//杨氏矩阵查找 方法二 分治法(二分查找)
#include "stdio.h"
#define ROW 4
#define COL 4
static int arr[ROW][COL]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
bool Young(int arr[][COL], int target)
{
int i = 0, j = COL-1;
int var = arr[i][j];
while(true)
if(var==target)
return true;
else if (var<target && i<ROW-1)
var = arr[++i][j];
else if(var>target && j>0)
var = arr[i][--j];
else
return false;
}
int main()
{
if( Young(arr,4) )
printf("%s", "I found it!");
else
printf("%s", "Sorry. Item doesn't exist!");
int i;
scanf("%d",&i);
}