1.调整
数组使奇数全部都位于偶数前面。
题目:
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
数组:
1 2 3 1 3 4
2 3 4 2 4 5
题目:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
#include <stdio.h>
#include <Windows.h>
//1.调整数组使奇数全部都位于偶数前面。
//题目:
//输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
void adjust(int arr[], int len) {
int left = 0;
int right = len - 1;
int temp = 0;
while (left < right) {
while (arr[left] % 2 == 1) { //向右寻找,直到找到偶数
left++;
}
while (arr[right] % 2 == 0) { //向左寻找,直到找到奇数
right--;
}
if (left < right) {
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
}
int main() {
int arr[] = { 1,2,3,4,5,6 };
int len = sizeof(arr) / sizeof(arr[0]);
adjust(arr, len);
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
2.
杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
数组:
1 2 3 1 3 4
2 3 4 2 4 5
3 4 5 3 4 5
编写程序,在这样的数组中查找一个数字是否存在.
#include <stdio.h>
#include <Windows.h>
#define ROW 3
#define COL 3
int Yang(int arr[ROW][COL], int val)
{
int i = 0;
int j = COL - 1;
int tmp = arr[i][j];
while (1)
{
if (tmp == val)
{
return 1;
}
else if (tmp < val && j >= 0)
{
tmp = arr[++i][j];
}
else if (tmp > val &&j >= 0)
{
tmp = arr[i][--j];
}
else
{
return 0;
}
}
}
int main()
{
int a[ROW][COL] = {1,2,3,2,3,4,3,4,5};
int i = 0;
int j = 0;
int num; //
printf("数组为:\n");
for (i = 0; i < ROW; i++){
for (j = 0; j < COL; j++)
{
printf("%5d", a[i][j]);
}
printf("\n");
}
printf("Please Enter You Want TO Find Number:");
scanf_s("%d", &num);
if (Yang(a, num))
{
printf("%d在该数组中\n", num);
}
else
{
printf("%d不在该数组中\n", num);
}
system("pause");
return 0;
}