今天主要學習了數組的算法:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//求斐波拉茲數列
void Fibonacci()
{
int arr[20] = { 1, 1 };
for (int i = 2; i < 20; i++)
{
arr[i] = arr[i - 1] + arr[i - 2];
}
for (int i = 0; i < 20; i++)
{
if (0 == i % 5)
{
printf("\n");
}
printf("%d\t", arr[i]);
}
printf("\n");
}
//冒泡排序
void MaoPao()
{
int arr[10];
//隨機數種子
srand((unsigned)time(NULL));
//隨機輸入
for (int i = 0; i < 10; i++)
{
//隨機分配10個數到數組中
arr[i] = rand() % 100;
}
//排序
int mark = 10, flag = 0;
for (int i = 0; i < --mark;)
{
int x = 0;
for (int j = 0; j < mark; j++)
{
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
x++;
}
printf("%d\t", x);
flag++;
}
printf("%d\n", flag);
//輸出
for (int i = 0; i < 10; i++)
{
if (0 == i % 5)
{
printf("\n");
}
printf("%d\t", arr[i]);
}
printf("\n");
}
//二維數組行列互換函數
void TwoArray1()
{
int arr1[2][3] = { {1,2,3},{4,5,6} };
int arr2[3][2] = { 0 };
//二維數組行
for (int i = 0; i < 2; i++) {
//二位數組列
for (int j = 0; j < 3; j++) {
arr2[j][i] = arr1[i][j];
}
}
//輸出二維數組
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("%d\t", arr2[i][j]);
}
printf("\n");
}
}
//找出二維數組中最大的那個數和他的行列
void TwoArray2()
{
int arr[3][4] = {0};
//隨機賦值
srand((unsigned)time(NULL));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
arr[i][j] = rand() % 100;
}
}
//求最大值
int max = arr[0][0],row,col;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
row = i + 1;//用於保存最大值行
col = j + 1;//用於保存最大值列
}
}
}
//輸出二維數組
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
printf("最大值爲:>%d\n其座標爲:>(%d,%d)", max, row, col);
}
//輸出某一行和某一列,其他位置空白
void TwoArray3()
{
int arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 || j == 1) {
printf("%-5d", arr[i][j]);
}
else {
printf("%-5c",' ');
}
}
printf("\n");
}
}
//二分法查找
void Half()
{
int arr[10] = { 1,2,3,76,345,887,34,67 };
int left = 0, right = 9, mid;
////隨機賦值
//srand((unsigned)time(NULL));
//for (int i = 0; i < 10; i++)
//{
// arr[i] = rand() % 100;
//}
//用插入排序
for (int i = 1; i < 10; i++)
{
int key = arr[i];
int j = i - 1;
while ((j >= 0) && (arr[j] > key))
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
for (int i = 0; i < 10; i++)
{
printf("%d\t", arr[i]);
}
printf("\n");
//折半查找
while (left < right)
{
mid = (left + right) / 2;
if (3 == arr[mid])
{
printf("3的位置爲:>%d\n", mid);
break;
}
else if (3 > arr[mid])
{
right = mid;
}
else
{
left = mid;
}
}
}
int main()
{
#if(0)
Fibonacci();//調用斐波拉茲函數
MaoPao();//調用冒泡排序
TwoArray1();//調用二維數組行列互換函數
TwoArray2();//找出二維數組中最大的那個數和他的行列
TwoArray3();//輸出某一行和某一列,其他位置空白
#endif
Half();//二分法查找
return 0;
}