C# 基础排序与查找算法

排序算法:

    class Sort
    {
        static void swap<T>(ref T a, ref T b)
        {
            T tmp = a;
            a = b;
            b = tmp;
        }

        #region 冒泡排序
        public static void Bubble(ref int[] arr)
        {
            for (int i = 0; i < arr.Length - 1; i++)
                for (int j = i + 1; j < arr.Length; j++)
                    if (arr[i] > arr[j])
                        swap(ref arr[i], ref arr[j]);
        }
        //其它数据类型同上
        public static void Bubble(ref string[] arr)
        {
            for (int i = 0; i < arr.Length - 1; i++)
                for (int j = i + 1; j < arr.Length; j++)
                    if (arr[i].CompareTo(arr[j]) > 0)
                        swap(ref arr[i], ref arr[j]);
        }
        #endregion

        #region 选择排序
        public static void Select(ref int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                int min = i;
                for (int j = i + 1; j < arr.Length; j++)
                    if (arr[j] < arr[min])
                        min = j;
                swap(ref arr[i], ref arr[min]);
            }
        }
        //其它数据类型同上
        #endregion

        #region 插入排序
        public static void Insert(ref int[] arr)
        {
            for (int i = 1; i < arr.Length; i++)
            {
                int tmp = arr[i];
                int j = i;
                while (j > 0 && arr[j - 1] >= tmp)
                {
                    arr[j] = arr[j - 1];
                    j--;
                }
                arr[j] = tmp;
            }
        }
        //其它数据类型同上
        #endregion
    }

查找算法

    class Search
    {
        static void swap<T>(ref T a, ref T b)
        {
            T tmp = a;
            a = b;
            b = tmp;
        }

        #region 顺序查找
        public static int SeqIndex(int[] arr, int val)
        {
            for (int i = 0; i < arr.Length; i++)
                if (arr[i] == val)
                    return i;
            return -1;
        }
        public static int FindMin(int[] arr)
        {
            int min = arr[0];
            for (int i = 1; i < arr.Length; i++)
                if (arr[i] < min)
                    min = arr[i];
            return min;
        }
        public static int FindMax(int[] arr)
        {
            int max = arr[0];
            for (int i = 1; i < arr.Length; i++)
                if (arr[i] > max)
                    max = arr[i];
            return max;
        }

        //自组织数据加快顺序查找速度,二八原则,常用的前移
        public static int CustSeqIndex(ref int[] arr, int val)
        {
            for (int i = 0; i < arr.Length; i++)
                if (arr[i] == val)
                {
                    if (i > arr.Length * 0.2)
                    {
                        swap(ref arr[i], ref arr[i - 1]);
                        return i - 1;
                    }
                    else return i;
                }
            return -1;
        }
        #endregion

        #region 二叉查找 须对有序数组
        public static int BinaryFind(int[] arr, int val)
        {
            int min = 0, max = arr.Length - 1;
            while (min <= max)
            {
                int mid = (min + max) / 2;
                if (arr[mid] < val)
                    min = mid + 1;
                else if (arr[mid] > val)
                    max = mid - 1;
                else return mid;
            }
            return -1;
        }
        //用递归法重写上述功能,效率没上面循环方法高
        public static int RBinaryFind(int[] arr, int val, int min, int max)
        {
            if (min > max)
                return -1;
            else
            {
                int mid = (min + max) / 2;
                if (arr[mid] == val)
                    return mid;
                else
                {
                    if (arr[mid] < val)
                        min = mid + 1;
                    else max = mid - 1;
                    return RBinaryFind(arr, val, min, max);
                }
            }
        }
        #endregion
    }
原文地址:https://www.cnblogs.com/lged/p/5889814.html