C#快速排序

简介:

1:需求

已知数组int[] max={72, 54, 59, 30, 31, 78, 2, 77, 82, 72};用快速排序算法按降序对其进行排列,并返回数组。

思路:

快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和a[j]交换的时刻。

2:代码

static  void  Main()
{
     array = new  int [] { 72, 54, 59, 30, 31, 78, 2, 77, 82, 72 };
     QuickSort(0, array.Length - 1);
     Console.WriteLine( "The Result: " );
     for  ( int  i = 0; i < array.Length; i++)
     {
         Console.Write(array[i] + ", " );
     }
     Console.ReadKey();
}
 
private  static  int [] array;
private  static  void  QuickSort( int  lowest, int  highest)
{
     if  (array == null  || lowest < 0 || lowest >= highest
     || highest >= array.Length)
     {
         return ;
     }
     int  low = lowest;
     int  high = highest;
     int  key = low++;
     for  (; low <= high; )
     {
         if  (key < high)
         {
             if  (array[key] > array[high])
             {
                 array[high] = array[key] + (array[key] = array[high]) * 0;
                 key = high;
             }
             high--;
         }
 
         if  (key > low)
         {
             if  (array[key] < array[low])
             {
                 array[low] = array[key] + (array[key] = array[low]) * 0;
                 key = low;
             }
             low++;
         }
     }
     for  ( int  i = 0; i < array.Length; i++)
     {
         Console.Write(array[i] + ", " );
     }
     Console.WriteLine();
     QuickSort(lowest, key - 1);
     QuickSort(key + 1, highest);
}

3:时间复杂度

log2(n)*n


本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/archive/2012/07/18/2305613.html,如需转载请自行联系原作者

相关文章
|
9月前
|
搜索推荐 C#
C#快速排序算法
C#快速排序算法
|
算法 C#
【愚公系列】2021年11月 C#版 数据结构与算法解析(交换排序-快速排序)
【愚公系列】2021年11月 C#版 数据结构与算法解析(交换排序-快速排序)
【愚公系列】2021年11月 C#版 数据结构与算法解析(交换排序-快速排序)
|
人工智能 C# 算法
C# 快速排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class QuickSorter { private static int[] myArray; private static int a
792 0
|
C# 索引
快速排序法的C#实现
今天心血来潮,想到自己数据结构学的不好,于是查了下快速排序法的原理,实现了一个玩玩。算是对自身知识的补充。 View Code public class Sort {/// /// 快速排序法(ASC)/// /// /// /// public stati...
743 0
|
9小时前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
9小时前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
9小时前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。