关于冒泡法的实际应用
下面的函数要求:
1.形参sum[]内的数组大小排序(不能实际更改sum[]内容),把大小顺序的sum下标放到re[]中。
Eg:
sum[]={3,4,2,1,5}
sum[0]=3
sum[1]=4
sum[2]=2
...
则
re[]={4,1,0,2,3}
(sum[]中最大值是5,其下标是sum[4])
#include <stdio.h>
#include "size_list.h"
//对sum数组中大小对比,并把最大的数的数组序号送给re[1],re[2]...(冒泡法)
// 要求不能改变sum[]数组中的值,用指针完成。
void size_list(int sum[],int re[])
{
int *ps = sum;
int *pr = re;
int *temp = 0;
int i=0;
int j=0;
//后面不知道怎么写了。。
//请老师帮忙。。
}
[最优解释]
我写了个
void size_list(int sum[],int re[]);
int main()
{
int sum[]={3,4,2,1,5};
int re[5];
size_list(sum,re);
system("pause");
return 0;
}
void size_list(int sum[],int re[])
{
int i,j;
int temp;
//注意这里的5是数组的长度,仅仅为了测试,可变的
for(int i=0;i<5;i++)
{
temp=0;
for(int j=0;j<5;j++)
{
if(sum[j]-sum[i]>0)
temp++;
}
re[temp]=i;
}
}
[其他解释]
用选择排序比较好
#include<stdio.h>
void size_list(int sum[],int re[],int n)
{
int i,j,k,temp;
int *ps = sum;
int *pr = re;
for(i=0;i<n-1;i++,pr++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(*(ps+i)<*(ps+j))
{
k=j;
}
}
*pr=k;
if(i!=k)
{
temp=*(ps+k);
*(ps+k)=*(ps+i);
*(ps+i)=temp;
}
}
}
main()
{
int a[5]={2,5,4,3,8};
int b[5]={0};
int i;
size_list(a,b,5);
for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(i=0;i<5;i++)
printf("%d ",b[i]);
}
[其他解释]
我想知道如何用指针的方法来实现这个功能呢?
Eg:p++ *(p++)
我想了解一下类似的用法^_^谢谢!