1、调整数组使奇数全部都位于偶数前面。
简单思路:
给出一个数组,判断数组中元素的奇偶性,从数组的两端分别开始判断,每判断一次左端+1,右端-1,当左端的值小于右端时,循环打印结果。
代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int arr[10]={1,2,3,4,5,6,7,8,9,0};
int sz = sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = sz-1;
while(left<right)
{
while((left<right) && (arr[left]%2 ==1))
{
left++;
}
while((left<right) && (arr[right]%2 == 0))
{
right--;
}
if(left<right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
for(i=0; i<sz; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
输出结果:
2、有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的,在这样的数组中查找一个数字是否存在。
简单思路如下:
在查找数字是否存在时,可以先在数组中找出一个数,根据它与要查找的数的大小比较逐步确定要查找的数的位置。这样的话,一开始在数组中选取的数就很重要。在对杨氏矩阵数组进行分析以后我们可以发现:在杨氏矩阵中,左上角是它的最小数,右下角是它的最大数,所以选取这两个位置的数并没有太大的意义。故此可以看一下左下角或右上角,发现这两个位置的数有比较的价值,则可以以这两个位置中的任何一个数为比较的基准。
代码如下:
#include<stdio.h>
int Find(int arr[3][3], int *px, int *py, int k)
{
int x = 0;
int y = *py-1;
while((x<*px) && (y>=0))
{
if(arr[x][y]<k)
{
x++;
}
else if(arr[x][y]>k)
{
y--;
}
else
{
*px = x + 1;
*py = y + 1;
return 1;
}
}
*px = -1;
*py = -1;
return 0;
}
int main()
{
int arr[3][3] = {1,2,3,4,5,6,7,8,9};
int k = 0;
int x = 3;
int y = 3;
printf("请输入要查找的数:");
scanf("%d",&k);
int ret = Find(arr, &x, &y, k);
printf("横坐标为:%d 纵坐标为:%d\n", x, y);
return 0;
}
输出结果: