新版代码地址:https://git.coding.net/clairewyd/wf.git

 

ptime运行结果:

第三次作业_02效能分析第三次作业_02效能分析第三次作业_02效能分析

 

瓶颈预测:

   根据代码猜测瓶颈应该在排序算法上,猜测此处为瓶颈主要是因为程序采用的是hashtable来存储单词,之后要根据hash表中键所对应的值进行排序,将键和值分放在两个数组中,以相同的索引为媒介,之后要同时对两个数组进行操作,故而需要操作的数据很多,可能成为程序瓶颈。在编程初始时使用的是冒泡排序,后来考虑到效率问题程序改为使用排序算法中较快的快速排序算法,时间复杂度从O(n^2)提高到O(nlogn)。

排序算法片段:

        /// <summary>
        /// 快速排序算法
        /// </summary>
        /// <param name="valueArray">单词对应的词频数数组</param>
        /// <param name="keyArray">存放单词数组</param>
        /// <param name="v1">左索引</param>
        /// <param name="v2">右索引</param>
        private void QuickSort(int[] valueArray, string[] keyArray, int v1, int v2)
        {
            if (v1 < v2)
            {
                int index2 = Division(valueArray, keyArray, v1, v2);
                QuickSort(valueArray, keyArray, index2 + 1, v2);
                QuickSort(valueArray, keyArray, v1, index2 - 1);
            }
        }



        public int Division(int[] valueArray, string[] keyArray, int v1, int v2)
        {
            while (v1 < v2)
            {
                int num = valueArray[v1];
                string num2 = keyArray[v1];
                if (num < valueArray[v1 + 1])
                {
                    valueArray[v1] = valueArray[v1 + 1];
                    valueArray[v1 + 1] = num;

                    keyArray[v1] = keyArray[v1 + 1];
                    keyArray[v1 + 1] = num2;

                    v1++;
                }
                else
                {
                    int temp = valueArray[v2];
                    valueArray[v2] = valueArray[v1 + 1];
                    valueArray[v1 + 1] = temp;

                    string temp2 = keyArray[v2];
                    keyArray[v2] = keyArray[v1 + 1];
                    keyArray[v1 + 1] = temp2;

                    v2--;
                }

            }
            //Console.WriteLine("----------\n");
            return v1;
        }
View Code

相关文章: