1.调整数组使奇数全部都位于偶数前面。
题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
#include <stdio.h>
#include <windows.h>
#include <assert.h>
//代码1:
void switch(int arr[], int sz)
{
int i = 0;
int j = 0;
for (i = 0; i < sz; i++)
{
if (arr[i] % 2 == 0)
{
for (j = i + 1; j < sz; j++)
{
if (arr[j] % 2 == 1)
{
int tmp = 0;
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
break;
}
}
}
}
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
int sz = sizeof(arr)/sizeof(arr[0]);
switch(arr, sz);
int i = 0;
for (; i < sz; i++)
{
printf(" %d ", arr[i]);
}
system("pause");
return 0;
}
//代码2:
//某数的比特位最低位为1,则说明此数为奇数;为0,则说明此数为偶数。
//数组在传参时,传的是首元素的地址,而且是一个指针,此过程发生了降级问题。
void jo_switch(int arr[], int size)
{
assert(arr);
assert(size > 0);
int *start = arr;
int *end = arr + size - 1;
while (start < end)
{
if (!(*start & 1) && (*end & 1))
{
SwitchData(start, end);
start++;
end--;
continue;
}
if (*start & 1)//奇数
{
start++;
}
if (!(*end & 1))//偶数
{
end--;
}
}
}
static void SwitchData(int *x, int *y)
{
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
static void show(int arr[], int size)
{
int i = 0;
for (; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int n = sizeof(arr) / sizeof(arr[0]);
show(arr, n);
jo_switch(arr, n);
show(arr, n);
system("pause");
return 0;
return 0;
}
2.杨氏矩阵:有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的。
在这样的数组中查找一个数字是否存在。时间复杂度小于O(N);
数组:1 2 3
2 3 4
4 5 6
#include <stdio.h>
#include <windows.h>
#pragma warning(disable:4996)
//char型数组在传参时,降级成char型指针;
//float型数组在传参时,降级成float型指针;
//二维数组在传参时,降级成指向一维数组的指针;
//总结:数组在传参时,都会降级成一个指针。
int findYang(int arr[][3], int row, int col, int data)
{
//i与j的取值为该数值最右上角的数
int i = 0;
int j = col - 1;
while (i<row && j>0)
{
if (data < arr[i][j])//data小于第一行最后一列(即最右上角)的数,说明data在此行,但不在此列
{
j--;
}
else if (data>arr[i][j])//data大于右上角的数,说明data肯定不在此行而在后面的行中
{
i++;
}
else//说明刚好找到
{
return 1;
}
}
return 0;//说明没找到
}
int main()
{
int arr[3][3] = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
int data = 0;
printf("Please Enter:");
scanf("%d", &data);
int isExist = findYang(arr, 3, 3, data);
if (isExist)
{
printf("%d is exist\n", data);
}
else
{
printf("%d is not exist\n", data);
}
system("pause");
return 0;
}