Work_10
调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //排序 void Sort(int* arr, int size){ //设置两个索引 int start = 0; int end = size - 1; while (start < end){ //从前往后寻找第一个偶数 while (arr[start] % 2 != 0){ start++; } while (arr[end] % 2 != 1){ end--; } if (start < end){ arr[start] = arr[start] ^ arr[end]; arr[end] = arr[start] ^ arr[end]; arr[start] = arr[start] ^ arr[end]; } } } int main(){ int arr[100]; int number; printf("请输入要排序的数字个数:\n"); scanf("%d", &number); printf("请输入这些数字:\n"); int i; for (i = 0; i < number; i++){ scanf("%d", &arr[i]); } //排序 Sort(arr, number); printf("排序后的数字为:\n"); for (i = 0; i < number; i++){ printf("%-3d", arr[i]); } printf("\n"); system("pause"); return 0; }
杨氏矩阵
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N) = O(row + col);
如:
数组:
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
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //建立一个结构体储存数字的位置 typedef struct Point{ int row; int col; int end; }Point;
//查找函数 int Find(int arr[][3], int key, int x, int y, Point* point){ //默认从(0,2)开始查找 //判断是否越界 0 < x < 2; 0 < y <2. if ((x > 2) || (y < 0)){ return 0; } //将key与当前位置数字进行比较 if (key == arr[x][y]){ point->row = x; point->col = y; point->end = 1; return 0; } if (key > arr[x][y]){ Find(arr, key, x + 1, y, point); } if (key < arr[x][y]){ Find(arr, key, x, y - 1, point); } return 0; } int main(){ //建立一个杨氏矩阵 int arr[][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //需要查找的数字 int key; printf("请输入要查找的数字:"); scanf("%d", &key); //设置一个标记,判断是否查找成功 Point pos; pos.end = 0; //开始查找的位置 //此代码默认从(0,2)开始查找 int x, y; printf("请输入开始查找的位置:"); printf("(输入格式为 => x,y)\n"); scanf("%d,%d", &x, &y); //进行查找 Find(arr, key, x, y, &pos); //判断是否查找成功 if (pos.end){ printf("查找成功!\n"); printf("该数字的位置为:(%d,%d)", pos.row, pos.col); } else { printf("查找失败!未查找到该数字!"); } printf("\n"); system("pause"); return 0; }