• C# 常用排序算法




    1, 快速排序:使用分冶思想,不断以某一元素为边界,分割成大小不同的区域。对于大多数数据集,这是最快的算法,除非分割成的区域每次都只有1个。算法复杂度:O(nLogn)

            public static void QuickSort(int[] ar, int begin, int end)
            {
                if (begin >= end)//1个或者无效区域
                    return;
                if (end - begin == 1)
                {
    
                }
    
                int i = begin, j = end;
    
                int hole = (begin + end) / 2;
                int value = ar[hole];
    
                while (i <= j && (j > hole || i < hole))
                {
                    while (j > hole && j >= i)
                    {
                        if (ar[j] >= value)
                        {
                            j--;
                        }
                        else
                        {
                            ar[hole] = ar[j];
                            hole = j;
                            j--;
                        }
    
                    }
                    //Pt(ar);
                    while (i < hole && i <= j)
                    {
                        if (ar[i] <= value)
                        {
                            i++;
                        }
                        else
                        {
                            ar[hole] = ar[i];
                            hole = i;
                            i++;
                        }
    
                    }
                    //Pt(ar);
                }
                ar[hole] = value;
                //Pt(ar);
                if (hole - begin > 1)
                {
                    QuickSort(ar, begin, hole - 1);
                }
                if (end - hole > 1)
                {
                    QuickSort(ar, hole + 1, end);
                }
            }
    QuickSort



    2, 冒泡排序:思想简单的算法,平均算法复杂度:O(n^2)

            public static void BubbleSort(int[] ar)
            {
                bool isDoSorted = false;
    
                for (int i = 0; i < ar.Length; i++)
                {
                    isDoSorted = false;
                    for (int j = 0; j < (ar.Length - 1 - i); j++)
                    {
                        if (ar[j] > ar[j + 1])
                        {
                            int temp = ar[j + 1];
                            ar[j + 1] = ar[j];
                            ar[j] = temp;
                            isDoSorted = true;
                        }
                    }
                    if (!isDoSorted)
                    {
                        break;
                    }
                }
            }
    
            public static void Pt(int[] ar)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("Arrary: ");
                foreach (int i in ar)
                {
                    sb.Append(i.ToString() + ", ");
                }
                Console.WriteLine(sb.ToString());
            }
    
            public static int[] fillArr()
            {
                int[] ar = new int[1000];
    
                for (int i = 0; i < ar.Length; i++)
                {
                    ar[i] = rd.Next(0, 99); //i;
                }
    
                return ar;
            }
    BubbleSort
  • 相关阅读:
    SQL 两张结构一样的表合并查询 .
    如何引用传递String Boolean 等,并改变他们的值
    SQL数据库还原时备份集中的数据库备份与现有的数据库不同的解决办法
    sqlserver查询指定树形结构的所有子节点
    TortoiseSVN 合并操作简明教程
    svn的merge使用例子
    svn merge部分的详细说明
    SVN使用方法总结
    spring中的aware接口
    spring是怎样面向接口编程的?
  • 原文地址:https://www.cnblogs.com/netact/p/3710477.html
Copyright © 2020-2023  润新知