今天主要学习了数组的算法:
#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;
}