c/c++只用数组与循环,将20个数按大小排列
答案:6 悬赏:0
解决时间 2021-01-16 07:32
- 提问者网友:凉末
- 2021-01-15 11:40
c/c++只用数组与循环,将20个数按大小排列
最佳答案
- 二级知识专家网友:北城痞子
- 2021-01-15 12:47
#include
#define n 20
void main()
{ int a[20],t;
int i,j;
cout<<"请输入20个数据"< for(i=0;i<=19;i++)
cin>>a[i];
for(i=1;i<19;i++)
for(j=0;j<=19-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
cout<<"排序后的结果是:";
for(i=20;i>=0;i--)
cout }
这个可以解决排序问题,也可以找出最大值,也就是第一个,你的问题不太清楚,你是不是不会给数组赋值啊?赋值要用循环的哦。不要忘记了
#define n 20
void main()
{ int a[20],t;
int i,j;
cout<<"请输入20个数据"<
cin>>a[i];
for(i=1;i<19;i++)
for(j=0;j<=19-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
cout<<"排序后的结果是:";
for(i=20;i>=0;i--)
cout
这个可以解决排序问题,也可以找出最大值,也就是第一个,你的问题不太清楚,你是不是不会给数组赋值啊?赋值要用循环的哦。不要忘记了
全部回答
- 1楼网友:深街酒徒
- 2021-01-15 16:56
前辈们已经给你整理了很多算法了,随便用一种就行。 前面几个兄弟提供的方法都可行。
- 2楼网友:蓝房子
- 2021-01-15 15:52
你这个是选择排序啊,
你的问题应该是在循环那里错了。
我手头正好有个例子:
//选择排序法SelectionSort(int arr[],int n)
template <typename T>
void SelectionSort(T arr[],int n)
{
int smallIndex; //表中最小元素的下标
int pass,j; //用来扫描子表的下标
T temp; //用来交换表元素的临时变量
//pass的范围是0~n-2
for (pass=0;pass<n-1;pass++)
{
//从下标pass开始扫描子表
smallIndex=pass;
//j遍历整个子表arr[pass+1]到arr[n-1]
for(j=pass+1;j<n;j++)
if(arr[j]<arr[smallIndex])
smallIndex=j;
//如果smallIndex和pass不在相同的位置
//则将子表中的最小项与arr[pass]交换
if(smallIndex!=pass)
{
temp=arr[pass];
arr[pass]=arr[smallIndex];
arr[smallIndex]=temp;
}
}
}
自己对照下吧。
还有种是双端排序,是选择排序的变种。就是每次遍历找最大和最小两个数,分别放在新数组的两端,顾名思义就是双端排序了。
你的问题应该是在循环那里错了。
我手头正好有个例子:
//选择排序法SelectionSort(int arr[],int n)
template <typename T>
void SelectionSort(T arr[],int n)
{
int smallIndex; //表中最小元素的下标
int pass,j; //用来扫描子表的下标
T temp; //用来交换表元素的临时变量
//pass的范围是0~n-2
for (pass=0;pass<n-1;pass++)
{
//从下标pass开始扫描子表
smallIndex=pass;
//j遍历整个子表arr[pass+1]到arr[n-1]
for(j=pass+1;j<n;j++)
if(arr[j]<arr[smallIndex])
smallIndex=j;
//如果smallIndex和pass不在相同的位置
//则将子表中的最小项与arr[pass]交换
if(smallIndex!=pass)
{
temp=arr[pass];
arr[pass]=arr[smallIndex];
arr[smallIndex]=temp;
}
}
}
自己对照下吧。
还有种是双端排序,是选择排序的变种。就是每次遍历找最大和最小两个数,分别放在新数组的两端,顾名思义就是双端排序了。
- 3楼网友:零点过十分
- 2021-01-15 15:15
可能是你的循环找最大数的方法有问题,所以你找到的始终都是第一个数组里面最大的那个数。我给你提供一种思路;
第一种方法,你可以直接把第二个数组复制第一个数组,然后排序下,也可以。
第二种方法,先用一次循环找出最大值,放进第二个数组,然后用第一个数组所有数字与这个最大值相减,差最小且为正数的为第二大,放进去第二个数组的第二个位置,然后再用原先数组的所有项与这个第二大相减,差最小且为正数的为第三大,以此类推。就可以了
第一种方法,你可以直接把第二个数组复制第一个数组,然后排序下,也可以。
第二种方法,先用一次循环找出最大值,放进第二个数组,然后用第一个数组所有数字与这个最大值相减,差最小且为正数的为第二大,放进去第二个数组的第二个位置,然后再用原先数组的所有项与这个第二大相减,差最小且为正数的为第三大,以此类推。就可以了
- 4楼网友:春色三分
- 2021-01-15 14:20
我暂时保留我的看法!
- 5楼网友:玩家
- 2021-01-15 13:46
经典的冒泡法只要1个数组就可以排序了
main()
{
int a[20];
int q=0,i,j,x;
for(i=0;i<20;i++)
{
scanf("%d",&a[i]);
}
for( i=0;i<10;i++)
{
for( j=0;j<10;j++)
{
int temp=0;
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
break;
}
}
main()
{
int a[20];
int q=0,i,j,x;
for(i=0;i<20;i++)
{
scanf("%d",&a[i]);
}
for( i=0;i<10;i++)
{
for( j=0;j<10;j++)
{
int temp=0;
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
break;
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |