1. 程式人生 > >陣列的運用

陣列的運用

1、調整陣列使奇數全部都位於偶數前面。 題目: 輸入一個整數陣列,實現一個函式, 來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分, 所有偶數位於陣列的後半部分。

  • 思路簡析:

判斷第一個數是不是奇數,若果是奇數,那就不移動,然後看下一個數,如果是奇數,那就把這個數放在最後一個位置。然後向前移動一個位置。好存放下一個偶數。當後面向前移動的位置和要比較的那個數重合溜了。會停止迴圈。看程式碼的註釋

//C語言
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void ahead_oaa(int arr[], int length) {
	int temp = 0;
	int num = 0;
	int len = length - 1;//確定最後一個位置
	while (temp != len) {//需要判斷的數字和更新的位置比較
		if (arr[temp] % 2 == 0) {//偶數
			num = arr[len];
			arr[len] = arr[temp];
			arr[temp] = num;//把數字放在後面
			--len;//然後把位置往前移一個
		}
		else {
			++temp;//是奇數就不懂,看下一個數字
			continue;
		}
	}
}
void main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
	int len = sizeof(arr) / sizeof(arr[0]);
	int show = 0;
	ahead_oaa(arr, len);
	while (show<len) {
		printf("%d ",arr[show]);
		++show;
	}
	system("pause");
}

2、楊氏矩陣 有一個二維陣列. 陣列的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的陣列中查詢一個數字是否存在。 時間複雜度小於O(N); ////陣列: //1 2 3     //1 3 4    //1 2 3 //2 3 4     //2 4 5    //4 5 6 //3 4 5     //4 5 6    //7 8 9

//C語言

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//楊氏矩陣
//有一個二維陣列.
//陣列的每行從左到右是遞增的,每列從上到下是遞增的.
//在這樣的陣列中查詢一個數字是否存在。
//時間複雜度小於O(N);
////陣列:
//1 2 3     //1 3 4    //1 2 3
//2 3 4     //2 4 5    //4 5 6
//3 4 5     //4 5 6    //7 8 9


//思路:
//因為是一行和一列都是遞增的,所以可以從最後一個數進行比較
//然後從最後一個數到第一個數進行遍歷的比較
void to_find(int arr[3][3],int num,int row,int col) {//二位陣列的行和列
	if (num > arr[2][2]) {
		printf("這個數太大了!沒找到!\n");
	}
	else if (num < arr[0][0]) {
		printf("這個數太小了!沒找到!\n");
	}
	else 
		while ((row>=0)&&(col>=0)) {//直到找到或者遍歷完沒找到退出迴圈
		
		if (num==arr[row][col]) {
			printf("找到了!第一次出現在第%d行,第%d列\n",row,col);
			break;
		}
		else if (num<arr[row][col]) {
			    --col;//往後開始更新
		}
		else if (col == 0) {
			--row;//因為這是最後一行,所以到上一行arr[1][0],此時col==0
			col += 2;//到第一個了就要,到上一行的第3個數字arr[1][2]
		}

	}

}
void main() {
	int arr[3][3] = { {1,2,3},{2,3,4}, {3,4,5} };
	int num;
		printf("請輸入一個整數:");
		scanf("%d",&num);
		to_find(arr,num,2,2);

	system("pause");
}