标题:小弟这里有个程序代码:关于排序并确定各数值原始位置,请各位指导下,先谢 ...
取消只看楼主
晓亮2015
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-11-5
结帖率:33.33%
已结贴  问题点数:10 回复次数:0 
小弟这里有个程序代码:关于排序并确定各数值原始位置,请各位指导下,先谢谢啦!
/*说明:我这里有一个5*5的数组(实际数组为1024*1024,这里只是为了验证算法的可行性),现在想从中找出9个最大的数值并存入3*3的数组中,并且要记录这9个数值在原来5*5数组中的位置,行列值存入r[],c[],同时保持这些行列值在原始5*5数组中前后相对位置不变(不知道说清楚了么),小弟编了一个程序,但是运行起来一直有问题,的确没辙了,想请教下大家!
还请指教下!
算法思路如下:先由小到大排序,同时记录它们在5*5数组中最原始的位置r[],c[];然后结合这些位置和原始5*5数组,找到最大的9个数值按前后相对位置不变的原则存入bb[][]中。
如果大家有其他的思路,也请指导下!多谢啦!
*/

// paixu_0.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int main(int argc, char* argv[])
{
int aa[5][5]={ {4,12,54,45,23},
    {6,34,32,54,64},
    {67,34,54,32,43},
    {12,43,56,43,1},
    {5,56,78,98,15}
    };
    int i,j,temp,*p,ia,ib,ja,jb,k,m,n,*q;
    int a[5][5],r[25],c[25],bb[3][3];
    int rc,ra,ca,counts;
//****************************************************//
    //------数组的复制-----//
    for(ia=0;ia<5;ia++)
    {    for(ib=0;ib<5;ib++)
        {a[ia][ib]=aa[ia][ib];
        printf("%3d",a[ia][ib]);
        }
        printf("\n");
    }
    printf("\n");
//**********************************************************//
    //------------数组的排序--------------//
    p = &a[0][0];
    q=&aa[0][0];
    counts=0;ra=0;ca=0;rc=0;
    for(i=0;i<25-1;i++)
    {
        for(j=0;j<25-i-1;j++)
        {   
            ra=counts/5;
            ca=counts%5;
            counts++;

            if(*(p+j) > *(p+j+1))
            {   
                temp = *(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=temp;
            //    printf("%3d",a[i][j]);
                if(j>0)
                {    *q=*(p+j-1);
                    if(*(q)!=*(p+j+1))
                    {
                    r[rc]=ra;
                    c[rc]=ca;   
                    }
                }
                else {
                r[rc]=ra;
                c[rc]=ca;
                }
            }
        }
    //    printf("\n");
        rc++;
    }
//此处是整个程序中最为关键的地方:一方面进行二维数据的排序,从小到大;
//另一方面对每一个排序的数据记录它在5*5二维数组中最原始的位置,并将行列分别存入数组r[]和c[]中!
//*****************************************************************************************************//
    //-------输出排序后的数据----------//
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%3d",a[i][j]);
        }
        printf("\n");
    }
    //--------提取其中3*3的peak并存入bb[]中----------//
    for(ja=0;ja<5;ja++)
        for(jb=0;jb<5;jb++)
        {
            for(k=0;k<9;k++)
            {
                if(ja==r[k]&&jb==c[k])
                {
                for(m=0;m<3;m++)
                    for(n=0;n<3;n++)
                        bb[m][n]=aa[ja][jb];
                }
            }
        }
//结合排序得到的最大的3*3个数据的位置求出相应的3*3矩阵,并存入bb[][]中!
//这是本程序的最终目的:即从5*5矩阵中找出3*3的最大的9个数据,同时记录他们的位置,并存入bb[][]
//(要求这9个数据在aa中的前后位置关系不能更改,即:如果78在aa中前面是56,后面是98,
//那么bb中数据的存储顺序仍然是这样的(56,78,98),不能为(67、78、98)等)
//***********************************************************************************************//
    //--------输出3*3peak数据-------//
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%3d ",bb[i][j]);
        }
        printf("\n");
    }
    return 0;
}
搜索更多相关主题的帖子: 可行性 最大的 记录 
2013-11-08 10:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-423223-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062199 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved