1.調整陣列使奇數全部都位於偶數前面2. 楊氏矩陣
阿新 • • 發佈:2018-12-19
1.調整陣列使奇數全部都位於偶數前面。 題目: 輸入一個整數陣列,實現一個函式,來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。
#include <stdio.h> void sort(int* a, int sz) { int left = 0; int right = sz - 1; for (left = 0; left != right; left++) { if (a[left]%2 != 0) //從前面開始為奇數繼續 continue; else //否則為偶數交換位置 { int temp = a[left]; a[left] = a[right]; a[right] = temp; if (a[right]%2 == 0)//從後面為偶數,不動j-- right--; left--; } } } int main() { int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int sz = sizeof(a)/sizeof(a[0]); int i; sort(a, sz); for (i = 0; i < sz; i++) { printf("%d ",a[i]); } return 0; }
2. 楊氏矩陣 有一個二維陣列,陣列的每行從左到右是遞增的,每列從上到下是遞增的,在這樣的陣列中查詢一個數字是否存在。 時間複雜度小於O(N);
陣列: 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
#include <stdio.h> int Findnum1(int arr[3][3], int key, int rows, int cols) { int row = 0; int col = cols-1; while (((row >= 0) && (row < rows)) && ((col <= cols-1))) { if (key < arr[row][col]) { col--; } if (key > arr[row][col]) { row++; } if (key == arr[row][col]) { return 1; } } return 0; } int Findnum2(int arr[3][3], int key, int rows, int cols) { int row = rows-1; int col = 0; while (((col >= 0) && (col < cols)) && (row <= cols-1)) { if (key < arr[row][col]) { row--; } if (key > arr[row][col]) { col++; } if (key == arr[row][col]) { return 1; } } return 0; } int main() { int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 10}; int key = 9; int ret = Findnum1(arr, key, 3, 3); { if (ret == 0) { printf("不存在\n"); } else if (ret == 1) { printf("存在\n"); } } return 0; }