几种排序算法的C#实现(待续)

简介:

class Program 
   { 
       static void Main(string[] args) 
       { 
           int[] unsort = { 2, 4, 3, 6, 7, 5, 6, 1, 8, 9, 3, 0 }; 
           //int[] unsort = { 2, 0}; 
           //bubble(unsort); 
           // selectionSort(unsort); 
           //insertionSort(unsort); 
           //insert_sort(unsort, 12); 
           MergeSort(ref unsort); 
           printSort(unsort);

       }

       static void printSort(int[] array) 
       { 
           foreach (int item in array) 
               Console.Write(item + " "); 
           Console.WriteLine(); 
       }

       static void bubble(int[] array) 
       { 
           for (int i = 0; i <= array.Length - 1; i++)//扫描的遍数 
           { 
               for (int j = 0; j &lt;= array.Length - 1 - i - 1; j++)//每次扫描,最大的沉底,然后可以少扫描一个。 
               {

                   if (array[j] > array[j + 1]) 
                   { 
                       int tmp = array[j + 1]; 
                       array[j + 1] = array[j]; 
                       array[j] = tmp; 
                   } 
               } 
               Console.WriteLine(string.Format("第{0}遍", i)); 
               printSort(array); 
           } 
       }

       static void selectionSort(int[] array) 
       {

           for (int i = 0; i <= array.Length - 1; i++)//数组中的元素依次取出与后续的比 
           { 
               for (int j = i; j &lt;= array.Length - 1; j++)//后续的元素 
               { 
                   if (array[i] > array[j]) 
                   { 
                       int tmp = array[i]; 
                       array[i] = array[j]; 
                       array[j] = tmp; 
                   } 
               } 
               Console.WriteLine(string.Format("第{0}遍", i)); 
               printSort(array); 
           } 
       }

       static void insertionSort(int[] array) 
       {

           for (int i = 1; i <= array.Length - 1; i++) 
           { 
               for (int j = 0; j &lt;= i - 1; j++) 
               { 
                   if (array[i] >= array[j] && array[i] < array[j + 1]) 
                   { 
                       insertArray(array, i, j + 1);//此方法专门实现插入和后移 
                   } 
                   else if (array[i] &lt; array[j]) 
                   { 
                       insertArray(array, i, 0); 
                   }

               } 
               Console.WriteLine(string.Format("第{0}遍", i)); 
               printSort(array); 
           } 
       }

       //待排序元素用一个数组a表示,数组有n个元素 
       static void insert_sort(int[] array, int n) 
       { 
           int i, j; 
           int t; 
           for (i = 1; i &lt; n; i++) //i表示插入次数,共进行n-1次插入 
           { 
               t = array[i]; //把待排序元素赋给t 
               j = i - 1; 
               while ((j >= 0) && (t < array[j])) 
               { 
                   array[j + 1] = array[j]; 
                   j--; 
               } // 顺序比较和移动// 此法妙哉! 
               array[j + 1] = t; 
               Console.WriteLine(string.Format("第{0}遍", i)); 
               printSort(array); 
           } 
       } 
       static void insertArray(int[] array, int from, int to)//从from移到to,from>=to 
       { 
           if (from &gt;= to) 
           { 
               int tmp = array[from]; 
               for (int i = from; i &gt;= to + 1; i--) 
               { 
                   array[i] = array[i - 1]; 
               } 
               array[to] = tmp; 
           } 
       }

       //归并排序 
       static void MergeSort(ref int[] array) 
       { 
           if (array.Length &gt; 1) 
           { 
               int i = array.Length / 2; 
               int[] left = new int[i]; 
               for (int index = 0; index &lt; left.Length; index++) 
               { 
                   left[index] = array[index]; 
               } 
               MergeSort(ref left);

               int[] right = new int[array.Length - i]; 
               for (int index = 0; index &lt; right.Length; index++) 
               { 
                   right[index] = array[index + i]; 
               } 
               MergeSort(ref right); 
               array = Two_Way_Merge_Sort(left, right); 
           }

       } 
       static public int[] Two_Way_Merge_Sort(int[] A, int[] B) 
       { 
           int[] C = new int[A.Length + B.Length]; 
           int k = 0; 
           int i = 0; 
           int j = 0; 
           while (i &lt; A.Length && j &lt; B.Length) 
           { 
               if (A[i] &lt; B[j]) 
               { 
                   C[k] = A[i]; 
                   k++; 
                   i++; 
               } 
               else 
               { 
                   C[k] = B[j]; 
                   k++; 
                   j++; 
               } 
           } 
           while (i &lt; A.Length) 
               C[k++] = A[i++]; 
           while (j &lt; B.Length) 
               C[k++] = B[j++]; 
           return C; 
       }

   }
















本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/583946,如需转载请自行联系原作者



相关文章
|
开发框架 搜索推荐 算法
C#经典十大排序算法(完结)
C#经典十大排序算法(完结)
|
搜索推荐 算法 C#
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
372 1
|
1月前
|
存储 监控 算法
电脑监控管理中的 C# 哈希表进程资源索引算法
哈希表凭借O(1)查询效率、动态增删性能及低内存开销,适配电脑监控系统对进程资源数据的实时索引需求。通过定制哈希函数与链地址法冲突解决,实现高效进程状态追踪与异常预警。
156 10
|
6月前
|
存储 算法 安全
如何控制上网行为——基于 C# 实现布隆过滤器算法的上网行为管控策略研究与实践解析
在数字化办公生态系统中,企业对员工网络行为的精细化管理已成为保障网络安全、提升组织效能的核心命题。如何在有效防范恶意网站访问、数据泄露风险的同时,避免过度管控对正常业务运作的负面影响,构成了企业网络安全领域的重要研究方向。在此背景下,数据结构与算法作为底层技术支撑,其重要性愈发凸显。本文将以布隆过滤器算法为研究对象,基于 C# 编程语言开展理论分析与工程实践,系统探讨该算法在企业上网行为管理中的应用范式。
189 8
|
7月前
|
机器学习/深度学习 监控 算法
员工上网行为监控软件中基于滑动窗口的C#流量统计算法解析​
在数字化办公环境中,员工上网行为监控软件需要高效处理海量网络请求数据,同时实时识别异常行为(如高频访问非工作网站)。传统的时间序列统计方法因计算复杂度过高,难以满足低延迟需求。本文将介绍一种基于滑动窗口的C#统计算法,通过动态时间窗口管理,实现高效的行为模式分析与流量计数。
197 2
|
5月前
|
监控 算法 数据处理
内网实时监控中的 C# 算法探索:环形缓冲区在实时数据处理中的关键作用
本文探讨了环形缓冲区在内网实时监控中的应用,结合C#实现方案,分析其原理与优势。作为固定长度的循环队列,环形缓冲区通过FIFO机制高效处理高速数据流,具备O(1)时间复杂度的读写操作,降低延迟与内存开销。文章从设计逻辑、代码示例到实际适配效果展开讨论,并展望其与AI结合的潜力,为开发者提供参考。
255 2
|
5月前
|
监控 算法 安全
公司电脑监控软件关键技术探析:C# 环形缓冲区算法的理论与实践
环形缓冲区(Ring Buffer)是企业信息安全管理中电脑监控系统设计的核心数据结构,适用于高并发、高速率与短时有效的多源异构数据处理场景。其通过固定大小的连续内存空间实现闭环存储,具备内存优化、操作高效、数据时效管理和并发支持等优势。文章以C#语言为例,展示了线程安全的环形缓冲区实现,并结合URL访问记录监控应用场景,分析了其在流量削峰、关键数据保护和高性能处理中的适配性。该结构在日志捕获和事件缓冲中表现出色,对提升监控系统效能具有重要价值。
159 1
|
6月前
|
存储 监控 算法
局域网上网记录监控的 C# 基数树算法高效检索方案研究
在企业网络管理与信息安全领域,局域网上网记录监控是维护网络安全、规范网络行为的关键举措。随着企业网络数据量呈指数级增长,如何高效存储和检索上网记录数据成为亟待解决的核心问题。基数树(Trie 树)作为一种独特的数据结构,凭借其在字符串处理方面的卓越性能,为局域网上网记录监控提供了创新的解决方案。本文将深入剖析基数树算法的原理,并通过 C# 语言实现的代码示例,阐述其在局域网上网记录监控场景中的具体应用。
171 7
|
11月前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
算法 安全 机器人
Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的伽马变换算法增强(C#)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的伽马变换算法增强(C#)
320 0

热门文章

最新文章