关于一个数组找到最小值后如何打出下标

wangyangtao 2009-02-03 11:10:05
题目是这样的:一个整数数组{34,91,83,56,29,93,56,12,88,72};找出去最小值并打印下标,并在主函数打出最小数和下标。
以下是我写的程序:
#include <iostream.h>

int array[]={34,91,83,56,29,93,56,12,88,72};
int min(int [], int);


int main()
{
int i, len;
len=sizeof(array)/sizeof(int);
for(i=0; i<len; i++)
cout<<array[i]<<",";
cout<<endl;
cout<<min(array,len)<<endl;
for(i=0; i<len; i++)
if(array[i]==min(array,len))
cout<<i<<endl; //我想用这个打出下标 但好像不对??
return 1;
}

int min(int a[], int number)
{
int i, temp;
for(int pass=0; pass<number; pass++)
for(i=0; i<number-pass;i++)
if(a[i+1]<a[i])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
// cout<<a[i]<<endl;
return a[i];
}

不知道怎么打出最下值得下标来?
...全文
697 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Learn-anything 2009-02-04
  • 打赏
  • 举报
回复
lg
chenyingshu 2009-02-04
  • 打赏
  • 举报
回复
upup
chenyingshu 2009-02-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 matrixcl 的回复:]
1楼和3楼回答的很完整了。

找最小的一个元素并不需要排序,用1楼的算法即可,时间复杂度是O(n); 楼主的方法进行了排序, 时间复杂度是O(n*n).排序正确的情况下最小的数总在0下标位置。

如果楼主一定要先排序在求原数组中的位置,需要在排序之前复制数组。

同时楼主的排序算法有个问题for(i=0; i <number-pass;i++) 应改为for(i=0; i <number-pass-1;i++),否则下面用的a[i+1]时会发生越界。
另外min函数返回a[0]即可…
[/Quote]

不要越界,找最小值不要排序。
matrixcl 2009-02-04
  • 打赏
  • 举报
回复
1楼和3楼回答的很完整了。

找最小的一个元素并不需要排序,用1楼的算法即可,时间复杂度是O(n); 楼主的方法进行了排序, 时间复杂度是O(n*n).排序正确的情况下最小的数总在0下标位置。

如果楼主一定要先排序在求原数组中的位置,需要在排序之前复制数组。

同时楼主的排序算法有个问题for(i=0; i <number-pass;i++) 应改为for(i=0; i <number-pass-1;i++),否则下面用的a[i+1]时会发生越界。
另外min函数返回a[0]即可。

chin_chen 2009-02-04
  • 打赏
  • 举报
回复
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
int arry[]={34,91,83,56,29,93,56,12,88,72};
cout<<"最小的元素是第"<<min_element(arry,arry+10)-arry<<"个"<<"它是";
cout<<*min_element(arry,arry+10)<<endl;
system("pause");

return 0;

}
wangyangtao 2009-02-04
  • 打赏
  • 举报
回复
还是 感谢大家 基本弄明白了 我的问题是错用了排序 呵呵 都是模仿书上的 自己没动脑筋 合乎
wangyangtao 2009-02-04
  • 打赏
  • 举报
回复
4楼用了算法库里的函数吧 挖塞
不过结果是7 应该是8吧?
wangyangtao 2009-02-04
  • 打赏
  • 举报
回复
好象pos=i,应改为i-1 最后输出也应该是array[pos-1]
waizqfor 2009-02-03
  • 打赏
  • 举报
回复

int min(int a[], int number)
{
int i, temp;
for(int pass=0; pass <number; pass++)
for(i=0; i <number-pass;i++)
if(a[i+1] <a[i])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
// cout < <a[i] < <endl;
return a[i];
}

不知道怎么打出最下值得下标来?

LZ 你的求最小值的函数里 用到了交换排序 所以把最小值放到了数组 第一个元素里 你再调用的时候 返回的就是第一个元素了
yangkunhenry 2009-02-03
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <iostream>
using namespace std;
int find_min(int arr[],int len)
{
int i;
int pos=0;
int min=arr[0];
for(i=1;i<len;++i)
if(min>arr[i])
pos=i;
return pos;
}
int main()
{
int arr[]={34,91,83,56,29,93,56,12,88,72};
int pos=0;
pos=find_min(arr,sizeof(arr)/sizeof(int));
cout<<pos<<endl<<arr[pos]<<endl;
return 0;
}
ljmscsq 2009-02-03
  • 打赏
  • 举报
回复

int min(int a[], int number)
{
int min=a[0];
int i=0;
for(int i=0;i<number;i++)
{
if(min>a[i])
{
min=a[i];
}
}
return min;
}

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧