码迷,mamicode.com
首页 > Windows程序 > 详细

C#C# ACM poj1007

时间:2015-03-19 09:56:23      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

求逆序数,快排

  public static void acm1007(int a, string[] c)
        {
            Dictionary<int, string> dic = new Dictionary<int, string>();
            int[] i = new int[a];
            var j = 0;
            foreach (var item in c)
            {
                int k = Acm1007Unit(item);
                if (!dic.ContainsKey(k))
                {
                    i[j] = k;
                    j++;
                    dic.Add(k, item + ",");
                }
                else
                {
                    dic[k] += item + ",";
                    i[j] = -1;
                    j++;
                }
            }
             QSortDIY(i, 0, i.Length - 1);

            for (int jjj = 0; jjj < i.Length ; jjj++)
            {
                if (i[jjj] != -1)
                {
                    Console.Write(dic[i[jjj]]);
                }
            }

        }
        public static int Acm1007Unit(string a)
        {
            int anum = 0;
            int cnum = 0;
            int gnum = 0;

            int r = 0;
            for (int i = a.Length - 1; i >= 0; i--)
            {
                switch (a[i])
                {
                    case A:
                        anum++;
                        break;
                    case C:
                        r += anum;
                        cnum++;
                        break;
                    case G:
                        r += anum + cnum;
                        gnum++;
                        break;
                    case T:
                        r += anum + cnum + gnum;
                        break;
                }
            }
            return r;
        }
        public static void QSortDIY(int[] array, int low, int high)
        {
            if (low >= high)
            {
                return;
            }
            int ie = QSortUnit(array, low, high);
            QSortDIY(array, low, ie - 1);
            QSortDIY(array, ie + 1, high);
        }
        private static int QSortUnit(int[] array, int low, int high)
        {
            int key = array[low];
            while (low < high)
            {
                while (array[high] >= key && high > low)
                {
                    --high;
                }
                array[low] = array[high];
                while (array[low] <= key && high > low)
                {

                    ++low;
                }
                array[high] = array[low];
            }
            array[low] = key;
            return high;
        }

 

C#C# ACM poj1007

标签:

原文地址:http://www.cnblogs.com/DhyDream/p/4349436.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!