字符串组排序

来源:互联网 发布:知乎 艾尔帕西诺 编辑:程序博客网 时间:2024/05/21 10:21

实现如下效果,将字符串组排序:dad,bood,bada,Admin,Good,aete,cc,Ko,Beta,Could
排序后为:Admin,aete,Beta,bada,bood,Could,cc,dad,Good,Ko
排序思路:字符串采用冒泡排序法,字符串与字符串的比较使用函数campareStr(string str1,string str2),返回1,就交字符串换位置
字符串比较思路:将字符串的每一个字符转化为ASCII进行排序,小的在前,但是a要在B的前边,所以先转换为大写字母对应的ASCII码进行比较
若转换后值相同,则按原值比较;比较结果str1中字符的ASCII码大于str2中字符的ASCII码就返回1,两个字符串交换位置

txt_strs1,是排序前的字符串组

txt_strs2,是排序后的结果

 

 private void button4_Click(object sender, EventArgs e)
        {
            if (txt_strs1.Text.ToString().Trim() == "")
                return;
            string[] strs1 = txt_strs1.Text.ToString().Split(',');
            for (int i = 0; i < strs1.Length; i++)
            {
                for (int j = i+1; j < strs1.Length; j++)
                {
                    int m=campareStr(strs1[i],strs1[j]);
                    if(m>0)//m=0,交换
                    {
                        string strTemp = strs1[i];
                        strs1[i] = strs1[j];
                        strs1[j] = strTemp;
                    }
                }
            }
            string str2 = "";
            for (int i = 0; i < strs1.Length; i++)
            {
                str2 = str2+"," + strs1[i];
            }
            txt_strs2.Text = str2.Substring(1);
        }

 

 

 

private int campareStr(string str1,string str2)
        {
            int m = 0;//是1交换,0不交换
            char[] charArry1 = str1.ToCharArray();
            char[] charArry2 = str2.ToCharArray();
            for (int i = 0; i < charArry1.Length&&i<charArry2.Length; i++)
            {
                int s1 = (int)charArry1[i];
                int s2 = (int)charArry2[i];
                if (((s1 >= 65 && s1 <= 90) || (s1 >= 97 && s1 <= 122)) && ((s2 >= 65 && s2 <= 90) || (s2 >= 97 && s2 <= 122)))//是字符串
                {
                    if(s1>=97)//将小写转为大写
                    {
                        s1 = s1 - 32;
                    }
                    if (s2 >= 97)
                    {
                        s2 = s2 - 32;
                    }
                    if (s1 == s2)//相等则按原状况相比
                    {
                        //直接比较ASCII码,小的在前
                        if ((int)charArry1[i] > (int)charArry2[i])
                        {
                            m = 1;
                            break;
                        }
                        if ((int)charArry1[i] < (int)charArry2[i])
                        {
                            m = 0;
                            break;
                        }                       
                       
                    }
                    else
                    {
                        if (s1 > s2)
                        {
                            m = 1;
                            break;
                        }
                        else
                        {
                            m = 0;
                            break;
                        }
                    }
                }
                else//直接比较ASCII码,小的在前
                {
                    if (s1 > s2)
                    {
                        m = 1;
                        break;
                    }
                    if (s1 < s2)
                    {
                        m = 0;
                        break;
                    }
                }
            }
            return m;

        }

原创粉丝点击