排字典顺序排序(c语言)

编程 同时被 2 个专栏收录
14 篇文章 0 订阅
8 篇文章 0 订阅

输入下述8个国家名字的字符串:CHINA、JAPAN、KOREA、INDIA、CANADA、AMERICAN、ENGLAND和FRANCE,将这些国名按字典顺序排序。

 

 

#include<stdio.h>

#include<string.h>

 

void main()

{

       charstr[8][9]={"CHINA","JAPAN","KOREA","INDIA","CANADA","AMERICAN","ENGLAND","FRANCE"};

       chartemp[9];

       inti,l;

    for (i=0;i<8;i++)

       {

              for(l=0;l<9;l++)

              {

                     printf("%c",str[i][l]);

              }

              printf("\n");

       }

       //排序

       printf("以上8个国家按字典中排序如下所示:\n");

       intj,k;

       for(j=0;j<8;j++)

       for(k=j+1;k<8;k++)

       {

                     if(strcmp(str[j],str[k])>0)

                     {//交换

                            strcpy(temp,str[j]);

                            strcpy(str[j],str[k]);

                            strcpy(str[k],temp); 

                     }

       }

              for(i=0;i<8;i++)//输出

                     printf("%s\n",str[i]);

}

 

1.字典序法
  字典序法中,对于数字123......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列1235412345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是54321
  字典序算法如下:
  设P1n的一个全排列:p=p1p2......pn=p1p2......pj-1pjpj+1......pk-1pkpk+1......pn
1)从排列的右端开始,找出第一个比右边数字小的数字的序号jj从左端开始计算),即
j=max{i|pi<pi+1}
2)在pj的右边的数字中,找出所有比pj大的数中最小的数字pk,即k=max{i|pi>pj}(右边的数从右至左是递增的,因此k是所有大于pj的数字中序号最大者)

3)对换pipk
4)再将pj+1......pk-1pkpk+1pn倒转得到排列p’’=p1p2.....pj-1pjpn.....pk+1pkpk-1.....pj+1,这就是排列p的下一个下一个排列。

  例如839647521是数字19的一个排列。从它生成下一个排列的步骤如下:
  自右至左找出排列中第一个比右边数字小的数字4839647521
  在该数字后的数字中找出比4大的数中最小的一个
5839647521
  将54交换
839657421
  将7421倒转
839651247
  所以839647521的下一个排列是839651247

 

 

 

  • 12
    点赞
  • 2
    评论
  • 24
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值