1.调整数组使奇数全部都位于偶数前面
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int *left,int *right)
{
*left ^=*right;
*right ^=*left;
*left ^=*right;
}
void Odd_even(int *arr,int len)
{
int left=0;
int right=len-1;
while(left<right)
{
while ((left<right)&&(arr[left] & 1))
{
left++;
}
while ((left<right)&&(!(arr[right] & 1)))
{
right--;
}
if(left<right)
{
Swap(&arr[left],&arr[right]);
}
else
break;
}
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10,11};
int len=sizeof(arr)/sizeof(arr[0]);
int i=0;
Odd_even(arr,len);
for(i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
2. //杨氏矩阵: 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
数组:
1 2 3
2 3 4
3 4 5
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int Yang(int arr[][3],int count,int x)
{
int i=0;
int j=2;
while(i<count && j>=0)
{
if(arr[i][j]<x)
i++;
else if(arr[i][j]>x)
j--;
else
return 1;
}
return -1;
}
int main()
{
int arr[3][3]={
{1,2,3},
{4,5,6},
{7,8,9},
};
int x=5;
int isExist=Yang(arr,3,x);
printf("is exist? %d\n",isExist);
return 0;
}