黑马程序员技术交流社区

标题: 数组问题 [打印本页]

作者: 周培    时间: 2013-9-9 18:43
标题: 数组问题
本帖最后由 周培 于 2013-9-9 19:52 编辑
  1. string[] strs = { "a|9", "b|2", "c|1", "d|7", "a|4" };
复制代码
如上代码,根据“|”右边的数字从大到小的排序,然后按照数字的排序输出“|”左边对应字母的排序,有什么思路?

作者: 天意    时间: 2013-9-9 19:10
刚写了一个,不知道是不是你的意思,参考一下吧~
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace lx
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             string[] strs = { "a|9", "b|2", "c|1", "d|7", "a|4" };
  12.             char[] str_char = new char[3];
  13.             int[] num = new int[5];
  14.             char[] strss = new char[5];
  15.             int temp;
  16.             char temp1;
  17.             for (int i = 0; i < strs.Length; i++)
  18.             {
  19.                 str_char = strs[i].ToCharArray();
  20.                 num[i] = str_char[2] - 48;
  21.                 strss[i] = Convert.ToChar(str_char[0]);
  22.             }
  23.             for (int j = 0; j < num.Length-1; j++)
  24.             {
  25.                 for (int k = 0; k < num.Length - 1 - j; k++)
  26.                 {
  27.                     if (num[k] < num[k + 1])
  28.                     {
  29.                         temp = num[k];
  30.                         num[k] = num[k + 1];
  31.                         num[k + 1] = temp;

  32.                         temp1 = strss[k];
  33.                         strss[k] = strss[k + 1];
  34.                         strss[k + 1] = temp1;
  35.                     }
  36.                 }
  37.             }
  38.             for (int x = 0; x < num.Length; x++)
  39.             {
  40.                 Console.Write(strss[x] + " ");
  41.             }
  42.             Console.ReadKey();
  43.         }
  44.     }
  45. }
复制代码

作者: 七里香    时间: 2013-9-9 19:26
天意 发表于 2013-9-9 19:10
刚写了一个,不知道是不是你的意思,参考一下吧~

注释啊,亲!没有注释没有技术分的哦!没注释别人看着很累的诶。

作者: 周培    时间: 2013-9-9 19:51
呵呵,刚刚研究出来了,跟2楼思路查不到
作者: 陈行    时间: 2013-9-9 20:18
刚有了一个思路  先把字符串用split分割  然后把字母和数字存入字典  数字当目录  然后将数字排序,往字典里输入数字 得出字母~
作者: haxyek    时间: 2013-9-11 09:33
本帖最后由 haxyek 于 2013-9-11 12:16 编辑

使用split分割,放入数组,然后根据数组的第一个值调整数组顺序。另一个思路:
不做split分割,直接对数组最后一个字符比较大小,排序数组,最后输出数组。。,
  1. namespace 排序
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             string[] strs = { "a|9", "b|2", "c|1", "d|7", "a|4" };
  8.             int tmp;
  9.             string exchange;
  10.             for (int j = 0; j < strs.Length - 1; j++)   //冒泡排序
  11.             {
  12.                 for (tmp = 0; tmp < strs.Length - 1; tmp++)
  13.                 {
  14.                     if ((int)strs[tmp][strs[tmp].Length-1] < (int)strs[tmp + 1][strs[tmp + 1].Length-1])   //判断最后一个字符串大小
  15.                     {
  16.                         exchange = strs[tmp + 1];   //交换数值
  17.                         strs[tmp + 1] = strs[tmp];
  18.                         strs[tmp] = exchange;
  19.                     }

  20.                 }
  21.             }
  22.             foreach(string s in strs)   //输出
  23.             {
  24.                 Console.WriteLine(s[0]);
  25.             }
  26.             Console.Read();
  27.         }
  28.     }
  29. }
复制代码

作者: 大虾挂了    时间: 2013-9-12 20:55
haxyek 发表于 2013-9-11 09:33
使用split分割,放入数组,然后根据数组的第一个值调整数组顺序。另一个思路:
不做split分割,直接对数组 ...

冒泡排序是不是增加一个是否换位的判定能好点,没准能减少循环次数,这个题不是就进行了2次换位么,所以没必要循环4次的,加一个判定3次就可以了吧。
  1. bool flag=true;
  2. for (int j = 0; flag && j < strs.Length - 1; j++) //若flag=flase,表示上次循环没有进行过位置交换,说明排序已经完成。
  3. //最坏的情况,进行了strs.Length-1次循环,依然有位置交换,
  4. //那么也可以终止循环,因为下一次必然没有变量交换了
  5. {
  6. flag = false;
  7. for (tmp = 0; tmp < strs.Length - 1; tmp++)
  8. {
  9. if ((int)strs[tmp][2] < (int)strs[tmp + 1][2]) //判断最后一个字符串大小
  10. {
  11. exchange = strs[tmp + 1]; //交换数值
  12. strs[tmp + 1] = strs[tmp];
  13. strs[tmp] = exchange;
  14. flag = true; //若发生了位置交换,那么证明可能排序没有完成,循环依然有进行的必要
  15. }

  16. }
  17. }
复制代码
这样改是不是好点


作者: haxyek    时间: 2013-9-12 21:58
大虾挂了 发表于 2013-9-12 20:55
冒泡排序是不是增加一个是否换位的判定能好点,没准能减少循环次数,这个题不是就进行了2次换位么,所以 ...

想法很好,{:soso_e179:}

作者: 大虾挂了    时间: 2013-9-12 22:25
haxyek 发表于 2013-9-12 21:58
想法很好,

谢谢前辈夸奖{:soso_e106:}

作者: haxyek    时间: 2013-9-12 22:30
大虾挂了 发表于 2013-9-12 22:25
谢谢前辈夸奖

同辈,同辈。。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2