1.调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
思路: 设置两个指针,第一个初始化指向数组第一个数字,它只往后移;第二个指针初始化指向数组最后一个元素,它只向前移.再两个指针相遇之前,第一个指针总是位于第二个指针的前面.如果第一个指针指向的数字是偶数,并且第二个指针指向的数字是奇数,则交换这两个数字.
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
void Adjust(int *arr,int sz)
{
int *pbegain = arr;
int *pend = arr + sz - 1;
while (pbegain < pend)
{
//向后移动pbegain,直到指向偶数
while ((pbegain<pend) && ((*pbegain&1) !=0) )
{
pbegain++;
}
//向前移动pend, 直到指向奇数
while ((pbegain < pend) && ((*pbegain & 1) == 0))
{
pend--;
}
if (pbegain < pend)
{
int temp = *pbegain;
*pbegain = *pend;
*pend = temp;
}
}
}
int main()
{
int arr[10] = { 5,8,6,4,7,14,25,24,12,10};
int sz = sizeof(arr) / sizeof(arr[0]);
Adjust(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
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
#include<stdio.h>
#include <stdlib.h>
Reseach(int arr[][3], int row, int col, int key)
{
int i = 0;
int j = col - 1;
//从第一行,最后一列开始寻找
while ((j >= 0) && (i <= 2))
{
if (arr[i][j] == key)
return 1;
else if (arr[i][j] < key)
i++;
else
j--;
}
return 0;
}
int main()
{
int arr[][3] = { 1, 2,3, 4, 5, 6, 7, 8, 9 };
int key = 2;
int row = 3;
int col = 3;
printf("please key: ");
scanf("%d", &key);
Reseach(arr, row, col, key);
//如果找到返回1,找不到返回0
if (Reseach(arr, row, col, key))
{
printf("找到了!\n");
}
else
{
printf("没找到!\n");
}
system("pause");
return 0;
}