算法-排序算法-快速排序

快速排序

/// <summary>
 /// 快速排序,稳定算法
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="arr"></param>
 /// <returns></returns>
 /// <exception cref="NotImplementedException"></exception>
 public static IList<T> QuickSort<T>(IList<T> arr) where T : IComparable
 {
     return QuickSort(arr,0, arr.Count);
 }       
 /// <summary>
 /// 快速分组排序
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="arr"></param>
 /// <param name="lo"></param>
 /// <param name="hi"></param>
 private static IList<T> QuickSort<T>(IList<T> arr, int lo, int hi) where T : IComparable
 {
     if (hi <= lo)
     {
         return arr;
     }
     int partion = QuickSortPartion(arr, lo, hi);
     QuickSort(arr, lo, partion - 1);
     QuickSort(arr, partion + 1, hi);
     return arr;
 }
 /// <summary>
 /// 分区,小的放左边,大的放右边
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="arr"></param>
 /// <param name="lo"></param>
 /// <param name="hi"></param>
 /// <returns></returns>
 private static int QuickSortPartion<T>(IList<T> arr, int lo, int hi) where T : IComparable
 {
	T key = arr[lo];//暂定第一个值为分界值
	int left = lo, right = hi + 1;//定义两个指针,初始指向最小索引和最大索引的下一个位置
   	while (true)
    {
         while (key.CompareTo(arr[--right]) < 0)
         {
             if (right == lo)
             {
                 break;
             }
         }
         while (key.CompareTo(arr[++left]) > 0)
         {
             if (left == lo)
             {
                 break;
             }
         }
         if (left >= right)
         {
             break;
         }
         else
         {
             arr.Swap(left, right);
         }
     }
     arr.Swap(lo, right);
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值