数组中的最大值以及最小值的位置变换的问题(C++)
将一个5×5的数组中的最大值放到数组的中心位置
分析:遍历数组,找到最大的元素,然后将该元素与中心位置的元素交换位置
#include<iostream> #include <stdlib.h> #include <time.h> using namespace std; int main( void) { void changeArrayData(int *arrayAddress1, int *arrayAddress2);//声明交换元素的函数· int array[5][5] = {0}; int i = 0, j = 0; int *arrayMax = 0; /*给数组赋值*/ srand((unsigned long)time(0));//初始化rand函数 while(i <25){ *(*array + i++) = rand()%100;//100以内的随机数 } i = 0; arrayMax = array[0]; while(++i < 25) { if(*(*array + i) > *arrayMax)//找最大值 arrayMax = *array + i; } if(arrayMax != array[2] + 2) { changeArrayData(arrayMax, array[2] + 2);//交换最大值 } /*输出数组*/ for(i = 0; i < 5; i++) { for(j = 0; j < 5; j++) cout<<*(*(array+i)+j)<<"\t"; cout<<endl; } cout<<endl; return 0; } /****************************************************** 函数功能: 交换两个整形地址单元的值 ******************************************************/ void changeArrayData(int *arrayAddress1, int *arrayAddress2) { int temp = 0; temp = *arrayAddress1; *arrayAddress1 = *arrayAddress2; *arrayAddress2 = temp; }
运行界面:
代码分析:
使用rand函数对数组赋初值,然后通过“打擂台”的方法,遍历数组的所有元素,找到最大的元素。
然后把arrayMax获取最大元素的地址,将arrayMax和中间的元素(array[2][2])的地址传递给函数changeArrayData,进行位置的变换。
将一个5×5的数组中的最大值放到数组的中心位置,将最小值放到数组的第一个元素的位置。
#include<iostream> #include <stdlib.h> #include <time.h> using namespace std; int main( void) { void changeArrayData(int *arrayAddress1, int *arrayAddress2); int array[5][5] = {0}; int i = 0, j = 0; int *arrayMax =*(array +2)+2, *arrayMin=*(array); /*给数组赋值*/ srand((unsigned long)time(0)); while(i <25){ *(*array + i++) = rand()%100;//100以内的随机数 } i = 0; while(++i < 25) { if(*(*array + i) > *arrayMax)//找最大值 arrayMax = *array + i; if(*(*array + i) < *arrayMin)//找最小值 arrayMin = *array + i; } if(arrayMax != array[2] + 2) { changeArrayData(arrayMax, array[2] + 2);//交换最大值 } if(arrayMin != array[0] ) { changeArrayData(arrayMin, array[0]);//交换最小值 } /*输出数组*/ for(i = 0; i < 5; i++) { for(j = 0; j < 5; j++) cout<<*(*(array+i)+j)<<"\t"; cout<<endl; } cout<<endl; return 0; } /****************************************************** 函数功能: 交换两个整形地址单元的值 ******************************************************/ void changeArrayData(int *arrayAddress1, int *arrayAddress2) { int temp = 0; temp = *arrayAddress1; *arrayAddress1 = *arrayAddress2; *arrayAddress2 = temp; }
运行界面:
代码分析:
arrayMax用来获取数组中最大的元素的地址,然后通过changeArrayData函数和a[2][2]交换位置;
arrayMin用来获取数组中最小的元素的地址,然后通过changeArrayData函数和a[0][0]交换位置。
将一个5×5的数组中的最大值放到数组的中心位置,四个角分别放4个最小的元素。
#include<iostream> #include <stdlib.h> #include <time.h> using namespace std; int main( void) { void changeArrayData(int *arrayAddress1, int *arrayAddress2); int Array[5][5] = {0}; int i = 0, j = 0; int *arrayMax =*(Array +2)+2, *arrayMin[4]={Array[0],Array[0]+4,Array[4],Array[4]+4}; /*给数组赋值*/ srand((unsigned long)time(0)); while(i <25){ *(*Array + i++) = rand()%100;//100以内的随机数 } i = 0; while(++i < 25) { if(*(*Array + i) > *arrayMax)//找最大值 arrayMax = *Array + i; if(*(*Array + i) < *arrayMin[0])//找最小值 arrayMin[0] = *Array + i; } if(arrayMax != Array[2] + 2) { changeArrayData(arrayMax, Array[2] + 2);//交换最大值 arrayMax=Array[2]+2; } if(arrayMin[0] != Array[0] ) { changeArrayData(arrayMin[0], Array[0]);//交换最小值 arrayMin[0]=Array[0]; } i=1; while(i++<25){ for(j=1;j<4;j++){ if(*(*Array + i)>*arrayMin[j-1]&&*(*Array + i)<*arrayMin[j]) changeArrayData(*Array+i,arrayMin[j]);//如果数组中的元素值,大于arrayMin[j-1],小于arrayMin[j],就将该元素与arrayMin指向的元素交换位置 } } /*输出数组*/ for(i = 0; i < 5; i++) { for(j = 0; j < 5; j++) cout<<*(*(Array+i)+j)<<"\t"; cout<<endl; } cout<<endl; return 0; } /****************************************************** 函数功能: 交换两个整形地址单元的值 ******************************************************/ void changeArrayData(int *arrayAddress1, int *arrayAddress2) { int temp = 0; temp = *arrayAddress1; *arrayAddress1 = *arrayAddress2; *arrayAddress2 = temp; }
运行界面:
代码分析:
然后,再次遍历数组中的所有元素,和arrayMin数组中的元素相比较:
i=1; while(i++<25){ for(j=1;j<4;j++){ if(*(*Array + i)>*arrayMin[j-1]&&*(*Array + i)<*arrayMin[j]) changeArrayData(*Array+i,arrayMin[j]);//如果数组中的元素值,大于arrayMin[j-1],小于arrayMin[j],就将该元素与arrayMin指向的元素交换位置 } }
变量数组中的元素,分别和arrayMin数组中的元素相比较,如果数组中的元素值,大于arrayMin[j-1],小于arrayMin[j],就将该元素与arrayMin指向的元素交换位置。
然后就可以实现最小的四个元素分别在四个角上。