数组的相关应用(输入数据、求最值、求和、查找、排序)
1.数组输入一组数据:
void Input(int x[],int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&x[i]);
}
return 0;
}
2.数组求最大值:
int FindMaxValue(int x[],int n) //自定义函数求最大值
{
int maxValue,i;
maxValue = x[0];
for(i=1;i<n;i++)
{
if(x[i] > maxValue)
{
maxValue = x[i];
}
}
return maxValue;
}
3.数组求最小值:
int FindMinValue(int x[],int n) //自定义函数求最小值
{
int minValue,i;
minValue = x[0];
for(i=1;i<n;i++)
{
if(x[i] < minValue)
{
minValue = x[i];
}
}
return minValue;
}
4.数组求和:
int Total(int x[],int n) //自定义函数求一组数据的和
{
int sum = 0,i;
for(i=0;i<n;i++)
{
sum += x[i];
}
return sum;
}
5.数组的线性查找:(数据可以是无序的)
int LinSearch(long num[],long x,int n) //自定义函数查找一组数据中的一个数据
{
int i;
for(i=0;i<n;i++)
{
if(num[i] == x)
{
return i; //输出要查找的数据所在数组的下标
}
}
return -1; //查找不到输出-1
}
6.数组的二分查找(折半查找):(数据必须是有序的)
int BinSearch(long num[],long x,int n) //自定义函数查找一组数据中的一个数据
{
int low = 0,high = n - 1,mid;
while(low <= high) //判断查找区间存在
{
mid = (high + low) / 2;
if(x > num[mid])
{
low = mid +1; //默认此组数据为升序排列
}
else if(x < num[mid])
{
high = mid - 1;
}
else
{
return mid; //输出查找到的数据的下标
}
}
return -1; //查找无果输出-1
}
完整代码:
#include <stdio.h>
int searchItem(int arr[],int len, int value){
int low = 0,high = len-1,mid;
while (low <= high) {
mid = (low + high)/2;
if (value > arr[mid]) {
low = mid+1;
}else if (value < arr[mid]){
high = mid - 1;
}else{
return mid;
}
}
return -1;
}
int main()
{
int a[10] = {1,2,31,45,52,62,73,86,90,100};
int x;
printf("请输入要查找的数据:");
scanf("%d",&x);
int l = searchItem(a,10,x);
printf("loc = %d\n",l);
return 0;
}
注意
优化后
int BinSearch(long num[],long x,int n) //自定义函数查找一组数据中的一个数据
{
int low = 0,high = n - 1,mid;
while(low <= high) //判断查找区间存在
{
mid = low + (high - low) / 2;
if(x > num[mid])
{
low = mid +1; //默认此组数据为升序排列
}
else if(x < num[mid])
{
high = mid - 1;
}
else
{
return mid; //输出查找到的数据的下标
}
}
return -1; //查找无果输出-1
}
7.数组的冒泡法排序:
void BubbleSort(int score[],int n) //自定义函数对数组中的数据进行升序排序
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=1;j<n-1;j++)
{
if (score[j] <score[j-1]) //比较相邻的两个数据,若顺序不对,则将其位置交换
{
temp = score[j];
score[j] = score[j-1];
score[j-1] = temp;
}
}
}
}
完整代码:
#include<stdio.h>
void BubbleSort(int score[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=1;j<n-1;j++)
{
if(score[j]<score[j-1])
{
temp=score[j];
score[j]=score[j-1];
score[j-1]=temp;
}
}
}
}
int main()
{
int i;
int a[10]={3,2,4,5,8,9,7,1,6,23};
BubbleSort(a,10);
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
8.数组的交换法排序:
void ChangeSort(int score[],int n) //自定义函数交换法排序
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(score[j] < score[i]) //从低到高排序
{
temp = score[j];
score[j] = score[i];
score[i] = temp;
}
}
}
}
9.数组的选择法排序:
void SelectionSort(int score[],int n) /*自定义函数用选择法对数据排序*/
{
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
if(score[j] < score[k]) /*升序排列*/
{
k = j; /*记录最小数下标位置*/
}
}
if(k !=1) /*若最小数不在下标位置*/
{
temp = score[k];
score[k] = score[i];
score[i] = temp;
}
}