程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> C#泛型快速排序算法

C#泛型快速排序算法

編輯:.NET實例教程

快速排序算法是我經常使用的算法,所以也寫成了泛型了,省事,不用為每個類型去寫個特定的算法了。

排序的對象是實現了IList接口的集合。

我已經發了一個查找類,經常都要一起使用的。



using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace CommonLibrary
...{
    /**//// <summary>
    /// Sorter 排序類
    /// </summary>
    public class Sorter
    ...{
        /**//// <summary>
        /// 兩個值的比較委托
        /// </summary>
        /// <typeparam name="T">類型</typeparam>
        /// <param name="value1">值1</param>
        /// <param name="value2">值2</param>
        /// <returns>返回值,值1大於值2返回1,值1小於值2返回-1,值1等於值2返回0</returns>
       &nbsp;public delegate int Compare<T>(T value1, T value2);

        /**//// <summary>
        /// 二分排序法
        /// </summary>
        /// <typeparam name="T">類型</typeparam>
        /// <param name="myList">要進行排序的集合</param>
        /// <param name="myCompareMethod">兩個值的比較方法</param>
        public static void DimidiateSort<T>(IList<T> myList, Compare<T> myCompareMethod)
        ...{
            DimidiateSort<T>(myList, 0, myList.Count-1, myCompareMethod);
        }
        /**//// <summary>
        /// 二分排序法
        /// </summary>
        /// <typeparam name="T">類型</typeparam>
        /// <param name="myList">要進行排序的集合</param>
        /// <param name="left">起始位置</param>
        /// <param name="right">結束位置</param>
        /// <param name="myCompareMethod">兩個值的比較方法</param>
        public static void DimidiateSort<T>(IList<T> myList, int left, int right, Compare<T> myCompareMethod)
        ...{
            if (left < right)
            ...{
                T s = myList[(right + left) / 2];
                int i = left - 1;
                int j = right + 1;
                T temp = default(T);
                while (true)
                ...{
                    do
                    ...{
                        i++;
         }
                    while (i < right && myCompareMethod(myList[i], s) == -1);
                    do
                    ...{
                        j--;
                    }
                    while (j > left && myCompareMethod(myList[j], s) == 1);
                    if (i >= j)
                        break;
                    temp = myList[i];
                    myList[i] = myList[j];
                    myList[j] = temp;
                }
                DimidiateSort(myList, left, i - 1, myCompareMethod);
                DimidiateSort(myList, j + 1, right, myCompareMethod);
            }
        }
    }


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved