陣列中奇數在前半部分,偶數在後半部分
阿新 • • 發佈:2019-02-10
1.陣列中所有的奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。
實現一個函式,來調整該陣列中數字的順序使得
#include <stdio.h>
void Adjust(int arr[],int len)
{
int i, j;
for (i = 0; i < len; i++) //遍歷陣列
{
if ((arr[i]%2)==0) //判讀奇偶
for (j = i + 1; j < len; j++) //從偶數所在位置向陣列末尾掃描
{
int temp;
if ((arr[j] % 2) == 1)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
break;
}
}
}
}
int main()
{
int i;
int arr[] = { 1 , 10,3, 5, 7, 9, 2, 4, 6, 8, 11 };
Adjust(arr, sizeof(arr) / sizeof(arr[0]));
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%3d", arr[i]);
}
printf("\n");
return 0;
}
2.楊氏矩陣查詢數字
有一個二維陣列.
陣列的每行從左到右是遞增的,每列從上到下是遞增的.
在這樣的陣列中查詢一個數字是否存在。
時間複雜度小於O(N);
陣列:
1 2 3
2 3 4
3 4 5
1 3 4
2 4 5
4 5 6
//楊氏矩陣查詢 方法二 分治法(二分查詢)
#include "stdio.h"
#define ROW 4
#define COL 4
static int arr[ROW][COL]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
bool Young(int arr[][COL], int target)
{
int i = 0, j = COL-1;
int var = arr[i][j];
while(true)
if(var==target)
return true;
else if (var<target && i<ROW-1)
var = arr[++i][j];
else if(var>target && j>0)
var = arr[i][--j];
else
return false;
}
int main()
{
if( Young(arr,4) )
printf("%s", "I found it!");
else
printf("%s", "Sorry. Item doesn't exist!");
int i;
scanf("%d",&i);
}