1.调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
void adjust_arr(int arr[], int size)
{
int t;
int i, j;
for (i = 0, j = size - 1; i <j;)
{
if ((arr[i] % 2 == 0) && (arr[j] % 2 == 1))
{
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
if (arr[i] % 2 == 1)
i++;
if (arr[j] % 2 == 0)
j--;
}
}
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8 };
int i;
int size = sizeof(arr) / sizeof(arr[0]);
adjust_arr(arr, size);
for (i = 0; i < size; i++){
printf("%d ", arr[i]);
}
printf("\n");
system("pause");
return 0;
}
//杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
#define ROW 3
#define COL 3
int Search(int arr[ROW][COL], int value) {
int i = 0;
int j = COL - 1;
int tmp = arr[i][j];
while (1) {
if (value == tmp) {
return 1;
}
else if (value > tmp && i < ROW - 1) {
tmp = arr[++i][j];
}
else if (value < tmp && j > 0) {
tmp = arr[i][--j];
}
else {
return 0;
}
}
}
int main() {
int arr[ROW][COL] = {
{ 1, 2, 3 },
{ 2, 3, 4 },
{ 3, 4, 5 }
};
int num = 0;
printf("请输入你要查找的数字\n");
scanf("%d", &num);
if (Search(arr, num) == 1) {
printf("找到了\n");
}
else {
printf("没找到\n");
}
system("pause");
return 0;
}