1.调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
解题思想:采用冒泡排序的思想,如果奇数在前偶数在后就交换两个数。
void Sort(int num[],int len)
{
printf("移动前:");
for (int i = 0; i < len; i++)
{
printf("%d ", num[i]);
}
printf("\n");
for (int i = 0; i < len - 1; ++i)
{
for (int j = 0; j < len - i - 1; ++j)
{
if (num[j] % 2 == 0 && num[j + 1] % 2 != 0)
{
int temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
printf("移动后:");
for(int i = 0; i < len; i++)
{
printf("%d ", num[i]);
}
printf("\n");
}
2.
//杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
1 3 4
2 4 5
4 5 6
1 2 3
4 5 6
7 8 9
解题思想:定义left和right如果小于目标数字就left++,如果大于目标数字就right--。
int Findnum(int arr[3][3], int key)
{
int left = 0;
int right = 2;
while ((left >= 0) && (right < 3))
{
if (arr[left][right] < key)
{
left++;
}
else if (arr[left][right] > key)
{
right--;
}
else if (arr[left][right] == key)
{
return 1;
}
}
return 0;
}
主函数代码块:
int main()
{
//1.调整数组使奇数全部都位于偶数前面。
int num[] = { 3,8,6,4,5,7,9,12,11 };
int len = sizeof(num) / sizeof(num[0]);
Sort(num, len);
//2.杨氏矩阵
int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
int key = 0;
printf("请输入一个数字查找:");
scanf("%d", &key);
int ret = Findnum(arr, key);
if (ret == 1)
{
printf("TURE\n");
}
else if (ret == 0)
{
printf("FALSE\n");
}
system("pause");
return 0;
}
运行结果截图: