| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 325 人关注过本帖
标题:请教一个入门级二维数组的排序问题
取消只看楼主 加入收藏
cookmilk
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-10-29
结帖率:0
收藏
已结贴  问题点数:20 回复次数:0 
请教一个入门级二维数组的排序问题
刚刚学习二维数组, 请教大大们一个问题,写好了 但是出错 估计是排序那里有问题 后附代码:
题目如下:
1.用户输入行数(1-10)。

2.分配array pointers。如下图
图片附件: 游客没有浏览图片的权限,请 登录注册


3.每行array的大小为用户输入的数字(1-15)。如下图
图片附件: 游客没有浏览图片的权限,请 登录注册


4.系统自动将每行array填充随机数字(-99 — 99)。如下图
图片附件: 游客没有浏览图片的权限,请 登录注册


5.用bubble sort 将每行从大到小排序。如下图
图片附件: 游客没有浏览图片的权限,请 登录注册


6.用insertion sort 将pointer的长度从长到短,至上而下排序。如下图
图片附件: 游客没有浏览图片的权限,请 登录注册


7.将结果保存到一个.txt file里面。格式如下:
例1:
 4   
 6: 90 70 60 50 30 10
 5: 90 80 60 20 10   
 3: 35 25 15   
 2: 99 80
例2:
 2
 4: 40 30 20 10
 3: 30 20 10

我的做法是:
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <crtdbg.h> 

int** buildTable        (void);
void bubble        (int** table, int size, int num);
void insertSort         (int** table, int size, int num);
void write        (FILE* fpDone, int num, int** table, int size);

int main( void )
{
    int **table;
    int size;
    int num;
    FILE* fpDone;
    table = buildTable ();
    bubble(table,size,num);
    printf ("Please wait for system calculate.\n");
    write    (fpDone, num,table,size);
    return 0;
}
int** buildTable(void)
{
    int **table;
        int size;
        int num;
        int r, c;
    srand(time(NULL));
    printf("Enter the number of row: ");
    scanf("%d", &size);
    table = (int **) calloc( size + 1, sizeof(int *) );
    if( !table )
        printf( "Not enough memory!\n" ), exit(101);
    *(table + size - 1) = NULL;
    for( r = 0; r < size; r++ )
    {
        printf("Enter number of integers in row %d:", r + 1);
        scanf("%d",&num);
        table[r] = (int *) calloc( num+1 , sizeof(int) );
        table[r] [0] = num ;
        if( !table[r] )
            printf( "Not enough memory!\n" ), exit(102);
        table[r][0] = num ;            
    
        for( c = 1; c <= num + 1; c++ )    
            table[r][c] = rand() % -99 + 99;
    }
    free( table );
    
    printf( _CrtDumpMemoryLeaks() ? "Memory Leak\n" : "No Memory Leak\n");
    
    return table;
}

void bubble(int** table, int size, int num)
{

int unsorted=0;
int* temp;
int i;
    int r, c;

while(unsorted==0)
{
    unsorted=1;
        for(i=0;i<size-1;i++)
        {
            if(table[i] >  table[i+1])
            {
                temp = table[i];
                table[i] = table[i+1];
                table[i+1] = temp;
                unsorted=0;
            }
        }
}

return;
}

void insertSort (int** table, int size, int num)
{
    int walk;
    int* temp;
    bool located;
    for (int current =1; current <= size; current++)
    {
        located = false;
        temp = table [current];
        for (walk = current - 1; walk >=0 && !located;)
            if (temp < table[walk])
            {
                table[walk + 1] = table [walk];
                walk--;
            }
            else
                located = true;
        table [walk + 1] = temp;
    }
    return;
}

void write(FILE* fpDone, int num, int** table, int size)
{
    int r,c;
    if (!(fpDone = fopen("Result.txt", "w")))
        {
            printf("Error! No sorted.txtt file found!\n");
            exit(103);
        }
    fprintf(fpDone, "The ragged table has %d rows\n\n", size );
        fprintf(fpDone,"%2d: ", num );
    for( r = 0; table[r] != NULL; r++ )
    {
        num = table[r][0];
        fprintf(fpDone,"%2d: ", num );
        for( c = 1; c <= num; c++ )
            fprintf(fpDone,"%3d ", table[r][c] );
        fprintf(fpDone,"\n" );
    }
    fprintf(fpDone, "\n" );
    return;
}


运行的时候有问题,有大大能帮忙看看吗?
搜索更多相关主题的帖子: 用户 
2012-10-29 12:42
快速回复:请教一个入门级二维数组的排序问题
数据加载中...
 
   



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

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