A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 4B青年 中级黑马   /  2015-7-7 22:35  /  607 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

原代码如下
  1. #include <stdio.h>
  2. #include <string.h>
  3. /**
  4. *  实现字符串的排序
  5. *
  6. *  @param arr <#arr description#>
  7. *  @param len <#len description#>
  8. */
  9. void sortString(char *arr[],int len){
  10.      //冒泡排序
  11.      //临时存放地址
  12.     char *temp;
  13.     for (int i=0; i<len-1; i++) {
  14.         for (int j=0; j<len-i-1; j++) {
  15.             //arr[j]  arr[j+1]
  16.             //比较字符串大小
  17.             if (strcmp(arr[j], arr[j+1])>0) {
  18.                 //实现arr[j]  arr[j+1]交换
  19.                 temp = arr[j];
  20.                 arr[j] = arr[j+1];
  21.                 arr[j+1] = temp;   
  22.             }   
  23.         }
  24.     }
  25. }
  26. int main(int argc, const char * argv[]) {
  27.     //输入5个国名并按字母顺序排列后输出。
  28.     char *name[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
  29.     for (int i=0; i<5; i++) {
  30.         printf("%s\n",name[i]);
  31.     }
  32.     //字符串排序
  33.     sortString(name, 5);
  34.     printf("\n");
  35.     for (int i=0; i<5; i++) {
  36.         printf("%s\n",name[i]);
  37.     }
  38.     return 0;
  39. }
复制代码

用选择排序的存储下标方式会更高效,代码如下
  1. #include <stdio.h>
  2. #include <string.h>
  3. /**
  4. *  实现字符串的排序
  5. *
  6. *  @param arr <#arr description#>
  7. *  @param len <#len description#>
  8. */
  9. void sortString(char *arr[],int len){
  10.      //选择排序
  11.      //临时存放地址
  12.     char *temp;
  13.     int min;
  14.     for (int i=0; i<len; i++) {
  15.         for (int j=i+1; j<len; j++) {
  16.              //假设arr[i]是最小值
  17.                min=i;
  18.             //arr[min]  arr[j]
  19.             //比较字符串大小
  20.             if (strcmp(arr[min], arr[j])>0) {
  21.                 //记下较小值的下标
  22.                     min=j;
  23.             }   
  24.         }
  25.         if(min!=i){
  26.              temp = arr[j];
  27.              arr[j] = arr[min];
  28.              arr[min] = temp;  
  29.        }
  30.     }
  31. }
  32. int main(int argc, const char * argv[]) {
  33.     //输入5个国名并按字母顺序排列后输出。
  34.     char *name[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
  35.     for (int i=0; i<5; i++) {
  36.         printf("%s\n",name[i]);
  37.     }
  38.     //字符串排序
  39.     sortString(name, 5);
  40.     printf("\n");
  41.     for (int i=0; i<5; i++) {
  42.         printf("%s\n",name[i]);
  43.     }
  44.     return 0;
  45. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马