免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 C/C++ sort
12下一页
最近访问板块 发新帖
查看: 3296 | 回复: 11
打印 上一主题 下一主题

sort [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-05 13:46 |只看该作者 |倒序浏览
本帖最后由 shihyu 于 2011-07-12 19:10 编辑

sss

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2011-01-05 13:59 |只看该作者
看不懂按什么排序的

论坛徽章:
0
3 [报告]
发表于 2011-01-05 14:06 |只看该作者
你这个排序是什么思想啊?

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
4 [报告]
发表于 2011-01-05 14:15 |只看该作者
确实看不懂。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
5 [报告]
发表于 2011-01-05 14:17 |只看该作者
本帖最后由 shihyu 于 2011-07-12 19:14 编辑

............

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
6 [报告]
发表于 2011-01-05 14:30 |只看该作者
汗,LZ编辑一次又错了吧,应该是下面的吧:
8,10,99,0,-5,11,88,33
10,8,11,-8,0,0,77,52
10,20,-12,23,55,60,-51,19
10,20,8,10,7,-7,44,55
30,41,56,61,103,-10,0,12

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
7 [报告]
发表于 2011-01-05 14:53 |只看该作者
ecjtubaowp我改过来了

请问这样你有写过类似代码?

谢谢

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
8 [报告]
发表于 2011-01-05 15:16 |只看该作者
本帖最后由 ecjtubaowp 于 2011-01-05 15:27 编辑

回复 7# shihyu


以前写过,好像很烦琐,类似于字符串数组的排序,写一个比较函数,

  1. int c[5][8];

  2. int cmp(const void *a,const void *b)
  3. {

  4. if ((int *)a[0] != (int *)b[0])return (int *)a[0]-(int *)b[0];
  5. else if ((int *)a[1] != (int *)b[1])return (int *)a[1]-(int *)b[1];
  6. else if ((int *)a[2] != (int *)b[2])return (int *)a[2]-(int *)b[2];
  7. ...//省略
  8. }

  9. qsort(c,5,sizeof(c[0]),cmp)
复制代码
这个比较函数不知道如何化简

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
9 [报告]
发表于 2011-01-06 01:14 |只看该作者
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <functional>
  4. #include <iterator>
  5. #include <vector>

  6. namespace facu
  7. {
  8.    template <typename ElementType, size_t SIZE>
  9.    bool arrayLessThan( ElementType (*first)[ SIZE ],
  10.                        ElementType (*second)[ SIZE ] )
  11.    {
  12.       return std::lexicographical_compare( *first, *first + SIZE,
  13.                                            *second, *second + SIZE,
  14.                                            std::less<ElementType>() );
  15.    }
  16. }

  17. int main()
  18. {   
  19.    using namespace std;
  20.    using namespace facu;
  21.    

  22.    int arrays[ 5 ][ 8 ] = {
  23.                             { 10, 20,-12, 23, 55, 60,-51, 19 },
  24.                             { 10, 20,  8, 10,  7, -7, 44, 55 },
  25.                             { 30, 41, 56, 61,103,-10,  0, 12 },
  26.                             { 8,  10, 99,  0, -5, 11, 88, 33 },
  27.                             { 10,  8, 11, -8,  0,  0, 77, 52 }
  28.                           };
  29.                         
  30.    typedef int (*ArrayPointer)[ 8 ];
  31.    vector<ArrayPointer> pointers;

  32.    for( ArrayPointer begin = &arrays[ 0 ], end = begin + 5;
  33.         begin != end; ++begin )
  34.       pointers.push_back( begin );


  35.    sort( pointers.begin(), pointers.end(),
  36.          arrayLessThan<int,8> );


  37.    for( int row = 0; row != 5; ++row )
  38.    {
  39.       copy( *pointers[ row ], *pointers[ row ] + 8,
  40.             ostream_iterator<int>( cout, " " ) );
  41.          
  42.       cout << endl;
  43.    }
  44.    

  45.    cout << endl;
  46.    
  47.    cout << "The largest one is "
  48.         << distance( &arrays[ 0 ], pointers.back() )
  49.         << "th element." << endl;
  50.    
  51.    cout << "The smallest one is "
  52.         << distance( &arrays[ 0 ], pointers.front() )
  53.         << "th element." << endl;
  54.         
  55. }// end of function 'main'
复制代码
上面是别人用C++写的 , 但我想要用纯C写 , 不知道有人写过吗?

谢谢

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
10 [报告]
发表于 2011-01-06 08:39 |只看该作者
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int __cdecl compare( const void* a, const void* b )
  4. {
  5.         const int* pa = (const int*)a;
  6.         const int* pb = (const int*)b;

  7.         for( unsigned int i=0; i<8; ++i )
  8.         {
  9.                 if(pa[i]<pb[i]) return -1;
  10.                 if(pa[i]>pb[i]) return +1;
  11.         }
  12.         return 0;
  13. }

  14. int main()
  15. {
  16.         int buf[5][8] = { 10, 20, -12, 23,  55,  60, -51, 19
  17.                                         , 30, 41,  56, 61, 103, -10,   0, 12
  18.                                         , 10, 20,   8, 10,   7,  -7,  44, 55
  19.                                         , 10,  8,  11, -8,   0,   0,  77, 52
  20.                                         ,  8, 10,  99,  0,  -5,  11,  88, 33 };

  21.         qsort( buf, sizeof(buf)/sizeof(buf[0]), sizeof(buf[0]), &compare );
  22.        
  23.         for( unsigned int i=0; i<sizeof(buf)/sizeof(buf[0]); ++i )
  24.         {
  25.                 for( unsigned int j=0; j<sizeof(buf[0])/sizeof(buf[0][0]); ++j )
  26.                 {
  27.                         printf( "%5d ", buf[i][j] );
  28.                 }
  29.                 printf( "\n" );
  30.         }

  31.         return 0;
  32. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP