我用arraylist添加一个50000个整形的int然后排序
仅计算其Sort所用的时间,仅耗时0.06秒左右
可是我自己写一个快速排序或者是调用array.sort的快速排序(根据反编译arraylist.sort里调用的也是array.sort),结果却要0.5秒左右时间··为何相差那么大??
到底微软在arraylist里面搞了什么?
仅计算其Sort所用的时间,仅耗时0.06秒左右
可是我自己写一个快速排序或者是调用array.sort的快速排序(根据反编译arraylist.sort里调用的也是array.sort),结果却要0.5秒左右时间··为何相差那么大??
到底微软在arraylist里面搞了什么?
解决方案 »
- 编辑和删除GridView时,如何同步修改和删除数据库的值.
- C#程序调用C++开发的返回字符串dll的问题
- winform中直接修改datagrid的数据后如何更新数据库的数据
- (请教)指定的参数已超出有效值的范围。参数名: index
- 怎么把dataset的内容存入数据库(急)
- Int32.Parse()和Convert.toInt32()两种写法有何区别啊?
- form提交到另一页
- 怎样实现 健壮的 SOCKET 通信?
- 很诡异的条码打印问题
- 请教一个网络聊天室编程的问题(VC#)
- 在用户控件中添加自定义属性,要在CS文件中添加,在ASPX的CS文件中能访问!!!,求救!!!!!!!!
- 请问在c#中如何打开外部程序
有那么厉害吗
1. 在划分元素的时候它对已经排好序的集合反而处理的很快,而理论上的的快速排序算法对已经排好序的几乎反而是所有排序算法中最慢的。
2. 划分之后,首先选择小的集合进行递归。这样将递归深度减小——对函数栈的存储减到最小,可以尽快结束递归。
3. 尾递归转化为迭代循环,根本不用递归,不消耗函数栈。你的算法又是怎么做的呢?
public static void QuickSort(IList oArray,int iStart,int iCount,IComparer oComparer)
{
if (iCount>1)
{
int i=iStart;
int j=iStart+iCount-1;
object oTemp=oArray[iStart];
do
{
while(i<j && oComparer.Compare(oTemp,oArray[j])<=0)
--j;
if (i<j)
{
oArray[i]=oArray[j];
++i;
}
while(i<j && oComparer.Compare(oArray[i],oTemp)<=0)
++i;
if (i<j)
{
oArray[j]=oArray[i];
--j;
}
}while(i<j);
oArray[i]=oTemp;
QuickSort(oArray,iStart,i-iStart,oComparer);
QuickSort(oArray,i+1,iStart+iCount-i-1,oComparer);
}
}调用array.sort的代码:
Array.Sort(array,null,0,array.Length,c);