调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
void swap(int a[], int n)
{
int b[MAX] = { 0 };
int left = 0;
int right = MAX - 1;
int i = 0;
for (i = 0; i < MAX; i++)
{
if (a[i] % 2 == 0)
{
b[left] = a[i];
left++;
}
else
{
b[right] = a[i];
right--;
}
}
for (i = 0; i < MAX; i++)
{
a[i] = b[i];
}
}
int main()
{
int a[MAX] = { 0 };
int i = 0;
for (i = 0; i < MAX; i++)
{
printf("请输入第%d个数字\n", i + 1);
scanf("%d", &a[i]);
}
swap(a, MAX);
printf("交换之后的数组为:\n");
for (i = 0; i < MAX; i++)
{
printf("%d\n", a[i]);
}
system("pause");
}
2.
//杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
1 3 4
2 4 5
4 5 6
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define M 4//M代表二维数组的行数
#define N 4//N代表二维数组的列数
int main()
{
int a[M][N] = { 0 };
int m = 0;
int n = 0;
int i = 0;
printf("请输入一个行列都是递增的二维数组\n");
for (m = 0; m < M; m++)
{
for (n = 0; n < N; n++)
{
printf("请输入第%d行第%d列的元素:\n", m + 1, n + 1);
scanf("%d", &a[m][n]);
}
}
for (m = 0; m < M; m++)
{
for (n = 0; n < N; n++)
{
printf("请输入第%d行第%d列的元素为%d:\n", m + 1, n + 1,a[m][n]);
}
}
printf("请输入您想要查找的数字:\n");
scanf("%d", &i);
if ((a[0][0]>i) || a[M-1][N-1] < i)
{
printf("该数组没有该数字\n");
return 0;
}
if (a[0][0] == i)
{
printf("该数组存在该数字\n");
return 0;
}
n = 0;
m = 0;
if (a[0][N-1] >= i)
{
for (n = N-1; n > 0; n--)
{
if (a[m][n] == i)
{
printf("该数组存在该数字\n");
return 0;
}
}
printf("该数组没有该数字\n");
return 0;
}
if (a[0][N-1] < i)
{
m = M-1;
for (n = 0; n < N; n++)
{
if (a[m][n] == i)
{
printf("该数组存在该数字\n");
return 0;
}
}
printf("该数组没有该数字\n");
return 0;
}
system("pause");
}