1 输入一个整数数组,实现一个函数:来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
#include<stdio.h>
#include<stdlib.h>
int swap(int arr[], int length){
int left = 0;
int right = length - 1;
int tmp = 0;
while (left < right){
while (arr[left] % 2 == 1){
left++;
}
while (arr[right] % 2 == 0){
right--;
}
if (left < right){
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
return 0;
}
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9 };
int length = sizeof(arr) / sizeof(arr[0]);
printf("初始数组为: ");
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]);
}
printf("\n");
swap(arr, length);
printf("调整后数组为:");
for (int i = 0; i < length; i++) {
printf("%d ", arr[i]);
}
printf("\n");
system("pause");
return 0;
}
2 杨氏矩阵:有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。时间复杂度小于O(N).
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define ROW 3
#define COL 3
int FindNumber(int arr[ROW][COL], int num ) {
int left = 0;
int right = COL - 1;
while (right < COL) {
if (arr[left][right] < num) {
left++;
}
if (arr[left][right] > num) {
right--;
}
if (arr[left][right] == num) {
return 1;
}
return 0;
}
return 0;
}
int main() {
int a[ROW][COL] = { 1,2,3,4,5,6,7,8,9 };
int i = 0;
int j = 0;
int num;
printf("有一个杨氏矩阵二维数组,数组为:\n");
for (i = 0; i < ROW; i++){
for (j = 0; j < COL; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("请输入需要查找的数:");
scanf("%d", &num);
if (FindNumber(a, num) == 1){
printf("%d在该数组中\n", num);
}
else if(FindNumber(a, num) == 0){
printf("%d不在该数组中\n", num);
}
system("pause");
return 0;
}