首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于冒泡法的现实应用

2012-12-16 
关于冒泡法的实际应用下面的函数要求:1.形参sum[]内的数组大小排序(不能实际更改sum[]内容),把大小顺序的s

关于冒泡法的实际应用
下面的函数要求:
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]);
}

[其他解释]
引用:
我写了个
C/C++ code?12345678910111213141516171819202122232425262728void size_list(int sum[],int re[]); int main(){    int sum[]={3,4,2,1,5};    int re[5];    size_list(sum,re);     system("p……

我想知道如何用指针的方法来实现这个功能呢?
Eg:p++  *(p++)
我想了解一下类似的用法^_^谢谢!

热点排行