现在的位置: 首页 > 综合 > 正文

ArrayList.Sort()

2013年12月01日 ⁄ 综合 ⁄ 共 11963字 ⁄ 字号 评论关闭

1.strategy模式

2.如果要实现自已的排序,则最少需要告诉系统,两个数比较,大个数大,哪个数小

3..netFramework采用quick方式,即分而治之,.net是取数组中间的数作为基数

 快速排序对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

http://baike.baidu.com/view/19016.html

 ===================================

 

 string[] transRecords = this.GetTransRecords(this.fuTransTxt.PostedFile.FileName);
        if (transRecords != null)
        {
            IList<Trans> transList = this.FormatToList(transRecords);
            DataView dv = ListToTable.ToDataTable(transList).DefaultView;           

            ArrayList al = new ArrayList();
            foreach (Trans item in transList)
            {
                al.Add(item);               
                //al.Add(new MyComparer(item));
            }
            DateTime beginTime = DateTime.Now;
            for (int i = 0; i < 1000000; i++)
            {
                if (i % 2 == 0)
                {
                    al.Sort();
                }
                else
                {
                    al.Sort();
                }
            }
            DateTime endTime = DateTime.Now;
            Response.Write(endTime - beginTime);
            Response.Write("<br>");

            DateTime beginTime2 = DateTime.Now;
            for (int i = 0; i < 1000000; i++)
            {
                if (i % 2 == 0)
                {
                    al.Sort(new TransCompare(true));
                }
                else
                {
                    al.Sort(new TransCompare(false));
                }
            }         
            DateTime endTime2 = DateTime.Now;
            Response.Write(endTime2 - beginTime2);

 

           

            ////al.Sort();

            //al.Sort(new TransCompare(false));

            //ArrayList alBing = new ArrayList();
            //foreach (MyComparer item in al)
            //{
            //    aalBing = item.Data;
            //}
            //this.gvTransList.DataSource = alBing;

            //this.gvTransList.DataSource = al;
            //this.gvTransList.DataBind();
            // this.BindLocalTransData();
        }

 

===============================

    private class TransCompare : IComparer
    {
        private bool ascending = true;
        public bool Ascending
        {
            get { return this.ascending; }
            set { this.ascending = value; }
        }
        public TransCompare(bool ascending)
        {
            this.ascending = ascending;
        }
        public int Compare(object x, object y)
        {
            int result = int.Parse(((Trans)x).OrderId) - int.Parse(((Trans)y).OrderId);
            return result * (this.Ascending ? 1 : -1);
        }
    }
    public class MyComparer : Trans, IComparable
    {
        private Trans _data;
        public Trans Data
        {
            get { return this._data; }
        }
        public MyComparer(object data)
        {
            this._data = (Trans)data;
            this.Init();           
        }
        int IComparable.CompareTo(object obj)
        {
            int x = int.Parse(this._data.OrderId);
            int y = int.Parse(((MyComparer)obj)._data.OrderId);
            return x.CompareTo(y);
        }
        public void Init()
        {
            this.Amount = this._data.Amount;
            this.MerId = this._data.MerId;
            this.GoodsId = this._data.GoodsId;
            this.MobileId = this._data.MobileId;
            this.OrderId = this._data.OrderId;
            this.MerDate = this._data.MerDate;
            this.PayDate = this._data.PayDate;
            this.Amount = this._data.Amount;
            this.AmtType = this._data.AmtType;
            this.BankType = this._data.BankType;
            this.SettleDate = this._data.SettleDate;
            this.TransType = this._data.TransType;
            this.TransState = this._data.TransState;
        }
       
    }

 

    public class Trans : IComparable
    {
        private string merId;
        private string goodsId;
        private string mobileId;
        private string orderId;
        private string merDate;
        private string payDate;
        private string amount;
        private string amtType;
        private string bankType;
        private string settleDate;
        private string transType;
        private string transState;

        /// <summary>
        /// 商户号
        /// </summary>
        public string MerId
        {
            get { return merId; }
            set { merId = value; }
        }
        /// <summary>
        /// 商品号
        /// </summary>
        public string GoodsId
        {
            get { return goodsId; }
            set { goodsId = value; }
        }
        /// <summary>
        /// 手机号
        /// </summary>
        public string MobileId
        {
            get { return mobileId; }
            set { mobileId = value; }
        }
        /// <summary>
        /// 支付号
        /// </summary>
        public string OrderId
        {
            get { return orderId; }
            set { orderId = value; }
        }
        /// <summary>
        /// 定单日期
        /// </summary>
        public string MerDate
        {
            get { return merDate; }
            set { merDate = value; }
        }
        /// <summary>
        /// 支付日期
        /// </summary>
        public string PayDate
        {
            get { return payDate; }
            set { payDate = value; }
        }
        /// <summary>
        /// 金额
        /// </summary>
        public string Amount
        {
            get { return amount; }
            set { amount = value; }
        }
        /// <summary>
        /// 付款类型
        /// </summary>
        public string AmtType
        {
            get { return amtType; }
            set { amtType = value; }
        }
        /// <summary>
        /// 银行类型
        /// </summary>
        public string BankType
        {
            get { return bankType; }
            set { bankType = value; }
        }
        /// <summary>
        /// 清算日期
        /// </summary>
        public string SettleDate
        {
            get { return settleDate; }
            set { settleDate = value; }
        }
        /// <summary>
        /// 交易类型
        /// </summary>
        public string TransType
        {
            get { return transType; }
            set { transType = value; }
        }
        /// <summary>
        /// 交易状态
        /// </summary>
        public string TransState
        {
            get { return transState; }
            set { transState = value; }
        }
        int IComparable.CompareTo(object obj)
        {
            int x = int.Parse(this.OrderId);
            int y = int.Parse(((Trans)obj).OrderId);
            return x.CompareTo(y);
        }
    }

=================================

    public class Trans : IComparable<Trans>, IComparer<Trans>
    {
        private string merId;
        private string goodsId;
        private string mobileId;
        private string orderId;
        private string merDate;
        private string payDate;
        private string amount;
        private string amtType;
        private string bankType;
        private string settleDate;
        private string transType;
        private string transState;

        /// <summary>
        /// 商户号
        /// </summary>
        public string MerId
        {
            get { return merId; }
            set { merId = value; }
        }
        /// <summary>
        /// 商品号
        /// </summary>
        public string GoodsId
        {
            get { return goodsId; }
            set { goodsId = value; }
        }
        /// <summary>
        /// 手机号
        /// </summary>
        public string MobileId
        {
            get { return mobileId; }
            set { mobileId = value; }
        }
        /// <summary>
        /// 支付号
        /// </summary>
        public string OrderId
        {
            get { return orderId; }
            set { orderId = value; }
        }
        /// <summary>
        /// 定单日期
        /// </summary>
        public string MerDate
        {
            get { return merDate; }
            set { merDate = value; }
        }
        /// <summary>
        /// 支付日期
        /// </summary>
        public string PayDate
        {
            get { return payDate; }
            set { payDate = value; }
        }
        /// <summary>
        /// 金额
        /// </summary>
        public string Amount
        {
            get { return amount; }
            set { amount = value; }
        }
        /// <summary>
        /// 付款类型
        /// </summary>
        public string AmtType
        {
            get { return amtType; }
            set { amtType = value; }
        }
        /// <summary>
        /// 银行类型
        /// </summary>
        public string BankType
        {
            get { return bankType; }
            set { bankType = value; }
        }
        /// <summary>
        /// 清算日期
        /// </summary>
        public string SettleDate
        {
            get { return settleDate; }
            set { settleDate = value; }
        }
        /// <summary>
        /// 交易类型
        /// </summary>
        public string TransType
        {
            get { return transType; }
            set { transType = value; }
        }
        /// <summary>
        /// 交易状态
        /// </summary>
        public string TransState
        {
            get { return transState; }
            set { transState = value; }
        }
        int IComparable<Trans>.CompareTo(Trans obj)
        {
            int x = int.Parse(this.OrderId);
            int y = int.Parse(((Trans)obj).OrderId);
            return x.CompareTo(y);
        }
        int IComparer<Trans>.Compare(Trans x, Trans y)
        {
            return ((IComparable<Trans>)x).CompareTo(y);
        }
    }

=========================================

    public static class ListToTable
    {
        /// <summary>
        /// 将集合类转换成DataTable
        /// </summary>
        /// <param name="list">集合</param>
        /// <returns></returns>
        public static DataTable ToDataTable(IList list)
        {
            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    result.Columns.Add(pi.Name, pi.PropertyType);
                }

                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        object obj = pi.GetValue(list[i], null);
                        tempList.Add(obj);
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }

        /// <summary>
        /// 将泛型集合类转换成DataTable
        /// </summary>
        /// <typeparam name="T">集合项类型</typeparam>
        /// <param name="list">集合</param>
        /// <returns>数据集(表)</returns>
        public static DataTable ToDataTable<T>(IList<T> list)
        {
            return ToDataTable<T>(list, null);
        }

        /// <summary>
        /// 将泛型集合类转换成DataTable
        /// </summary>
        /// <typeparam name="T">集合项类型</typeparam>
        /// <param name="list">集合</param>
        /// <param name="propertyName">需要返回的列的列名</param>
        /// <returns>数据集(表)</returns>
        public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
        {
            List<string> propertyNameList = new List<string>();
            if (propertyName != null)
            {
                propertyNameList.AddRange(propertyName);
            }

            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    if (propertyNameList.Count == 0)
                    {
                        result.Columns.Add(pi.Name, pi.PropertyType);
                    }
                    else
                    {
                        if (propertyNameList.Contains(pi.Name))
                            result.Columns.Add(pi.Name, pi.PropertyType);
                    }
                }

                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        if (propertyNameList.Count == 0)
                        {
                            object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        else
                        {
                            if (propertyNameList.Contains(pi.Name))
                            {
                                object obj = pi.GetValue(list[i], null);
                                tempList.Add(obj);
                            }
                        }
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }
    }

 

 

==========================

以上几种算法

时间复杂度:1。IComparable,2。ICompara, 3Table

 

 

 

抱歉!评论已关闭.