C语言指针求最大值问题
发布网友
发布时间:2022-05-02 13:37
我来回答
共6个回答
热心网友
时间:2022-06-20 07:26
你看maxToFront函数能不能这样写:用一个变量来存整数组的最大值,一个存最大值的下标,遍历玩整个数组之后从最大值的下标开始,前面的所有的数都向后移动一个位置,最后再把最大值赋给数组的第一个元素,
void maxToFront(int *a, int n) {
/* BEGIN ANSWER -- do not delete this line */
int i=1;
int max;
int x=0;
max=*a;
while(i<n)
{
if(max<*(a+i))
{
max=*(a+i);
x=i;
}
i++;
}
while(x>0)
{
*(a+x)=*(a+x-1);
x--;
}
*a=max;
/* END ANSWER -- do not delete this line */
}
热心网友
时间:2022-06-20 07:26
/*
After maxToFront, b is 44, 6, 2, 4, 5, -10, -6, 5, 8, 2.
After maxToFront, c is 44, 2, 3, -6, 4, 8, -2, 44, 9, 6, 1, 3, 4, -11, 0.
Press any key to continue
*/
void maxToFront(int *a, int n) {
/* BEGIN ANSWER -- do not delete this line */
int i,tmp,maxi = 0;
for(i = 1; i < n; ++i)
if(a[i] > a[maxi])
maxi = i;
if(maxi != 0) {
tmp = a[maxi];
for(i = maxi; i > 0; --i)
a[i] = a[i - 1];
a[0] = tmp;
}
/* END ANSWER -- do not delete this line */
}
热心网友
时间:2022-06-20 07:27
#include <stdio.h>
#include <stdlib.h>
void maxToFront(int *a, int n) {
int iMax=-1;//记录最大值的位置
int vMax=0;//记录最大值
int i=0;
while(i<n)
{
if(*(a+i)>vMax)
{
vMax=*(a+i);
iMax=i;
}
i++;
}
for(int j=iMax-1;j>=0;j--)
{
*(a+j+1)=*(a+j);
}
*a=vMax;
}
int main (void) {
int i;
int b[10]={6,2,4,44,5,-10,-6, 5, 8,2};
int c[15]={2,3,44,-6,4,8,-2,44,9,6,1,3,4,-11,0};
maxToFront(b, 10);
printf("After maxToFront, b is %d", b[0]);
for(i=1; i<10; i++)
printf(", %d", b[i]);
printf(".\n");
maxToFront(c, 15);
printf("After maxToFront, c is %d", c[0]);
for(i=1; i<15; i++)
printf(", %d", c[i]);
printf(".\n");
return EXIT_SUCCESS;
}
热心网友
时间:2022-06-20 07:27
你的代码遇到后一个前面一个大的时候,就要换位置,所以遇到5,8的时候,8和5交换,再比较8和-6,再交换位置,一直到遇到44,所以8会到5,-10,-6。。。。。的前面。觉得应该先找到最大值,然后直接从最大值的序号开始交换就可以了,当然这个交换的方法就很多了。
另外i=0;的时候。while的第一次循环if(*(a+n-i)>*(a+n-i-1))相当于if(*(a+n)>*(a+n-1)),但是*(a+n)已经超出a的范围了,用指针表示数组最后一个元素应该是*(a + arr_len - 1);
请参考。
void maxToFront(int *a, int n) {
/* BEGIN ANSWER -- do not delete this line */
int temp=0;
int i=1;
int max_index = 0;;
for(i = 1; i < n; i++)
{
if(a[max_index] < a[i])
max_index = i;
}
i = max_index;
while(i > 0)
{
temp=*(a+i);
*(a+i)=*(a+i -1);
*(a+i-1)=temp;
i--;
}
/* END ANSWER -- do not delete this line */
}
热心网友
时间:2022-06-20 07:28
你可以声明一个int型的变量,从头遍历,变量中始终保存着当前最大值的索引,等到遍历完成之后,再将变量保存的索引值与最开始的元素交换位置就好了,至于代码就不给你写了,授人以鱼不如授人以渔,慢慢体会吧。
热心网友
时间:2022-06-20 07:29
你看maxToFront函数能不能这样写:用一个变量来存整数组的最大值,一个存最大值的下标,遍历玩整个数组之后从最大值的下标开始,前面的所有的数都向后移动一个位置,最后再把最大值赋给数组的第一个元素,
void
maxToFront(int
*a,
int
n)
{
/*
BEGIN
ANSWER
--
do
not
delete
this
line
*/
int
i=1;
int
max;
int
x=0;
max=*a;
while(i<n)
{
if(max<*(a+i))
{
max=*(a+i);
x=i;
}
i++;
}
while(x>0)
{
*(a+x)=*(a+x-1);
x--;
}
*a=max;
/*
END
ANSWER
--
do
not
delete
this
line
*/
}