zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    linux安装mysql5.6全流程
    linux安装redis集群全流程
    脑图-流程图-ppt制作工艺
    控制台添加log4net
    正则表达式非获取匹配的用法
    Win10查看已存储WiFi密码的两种方法
    redis中list set zset的区别
    Topshelf 搭建 Windows 服务
    SQLSERVER 自增列跳ID 1W-1K问题
    sqlserver 自增列(id)跳跃问题,一下就跳过一千多个id
  • 原文地址:https://www.cnblogs.com/netact/p/3710477.html
Copyright © 2011-2022 走看看