码迷,mamicode.com
首页 > 编程语言 > 详细

矩阵的排序

时间:2015-05-05 22:03:22      阅读:404      评论:0      收藏:0      [点我收藏+]

标签:二维数组   排序算法   矩阵   

在一个m*n矩阵中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,按从小到大的顺序打印这个矩阵到一个一维数组中。如图,则应打印出

1,2,2,4,4,6,7,8,8,9,9,10,11,12,13,15.

技术分享

思路:

如果把它想成 合并m个大小为n的数组,那么思路将会很简单。
但是,矩阵的m和n为随机值,所以并不能想很简单的那种合并。
假如我们定义一个大小为m的数组s,他的下表对应矩阵不同的行,
对应的值我们保存当前矩阵遍历到的位置,由于不同行是经过排序的,
所以我们只需要找出m行里最小的元素,放到指定数组,即可实现排序。
例如:
第一次 从1 2 4 6里找到最小的1,此时第一行的第一个元素已经遍历,所以我们定义的数组s,对应的s[0]+=1,表示下一个遍历的位置在1.

代码

int * Sort(int ar[][4],int m,int n)
{
    int *ret = (int *)malloc(sizeof(int)*m*n); //保存结果的数组
    int *s = (int *)malloc(sizeof(int)*n);//保存当前遍历位置
    memset(s, 0, sizeof(int)*n);//初始化为0

    for (int i=0; i < m*n; i++)
    {
        int min=0;//保存最小值在第几行
        while (s[min] == n)min++;//如果当前行全部遍历完了则不需要判断了

        for (int l = min+1; l < m; l++)
        {
            if (ar[min][s[min]] > ar[l][s[l]])
            {
                min = l;//更新min位置
            }
        }
        ret[i] = ar[min][s[min]];//保存结果
        s[min]++;       // 遍历位置更新
    }
    free(s);//内存释放
    return ret;
}

运行结果

技术分享
技术分享

矩阵的排序

标签:二维数组   排序算法   矩阵   

原文地址:http://blog.csdn.net/a781558066/article/details/45506493

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!