【算法】C#快速排序类

来源:互联网 发布:php考勤系统源码免费 编辑:程序博客网 时间:2024/05/21 18:42

快速排序的基本思想是基于分治策略的。对于输入的子序列ap..ar,如果规模足够小则直接进行排序,否则分三步处理:

分解(Divide):将输入的序列ap..ar划分成两个非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值。 
递归求解(Conquer):通过递归对p..aq和aq+1..ar进行排序。 
合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在ap..aq和aq+1..ar都排好序后不需要执行任何计算ap..ar就已排好序。 
这个解决流程是符合分治法的基本步骤的。因此,快速排序法是分治法的经典应用实例之一。

using System;

namespace VcQuickSort
{
 /// <summary>
 /// ClassQuickSort 快速排序。
 /// 范维肖
 /// </summary>

 public class QuickSort
 {
  public QuickSort()
  {
  }

  private void Swap(ref int i,ref int j)
  //swap two integer
  {
   int t;
   t=i;
   i=j;
   j=t;
  }
  
  public void Sort(int [] list,int low,int high)
  {
   if(high<=low)
   {
    //only one element in array list
    //so it do not need sort
    return;
   }
   else if (high==low+1)
   {
    //means two elements in array list
    //so we just compare them

    if(list[low]>list[high])
    {
     //exchange them
     Swap(ref list[low],ref list[high]);
     return;
    }
   }
   //more than 3 elements in the arrary list
   //begin QuickSort

   myQuickSort(list,low,high);
  }

  public void myQuickSort(int [] list,int low,int high)
  {
   if(low<high)
   {
    int pivot=Partition(list,low,high);
    myQuickSort(list,low,pivot-1);
    myQuickSort(list,pivot+1,high);
   }
  }

  private int Partition(int [] list,int low,int high)
  {
   //get the pivot of the arrary list
   int pivot;
   pivot=list[low];
   while(low<high)
   {
    while(low<high && list[high]>=pivot)
    {
     high--;
    }
    if(low!=high)
    {
     Swap(ref list[low],ref list[high]);
     low++;
    }
    while(low<high && list[low]<=pivot)
    {
     low++;
    }
    if(low!=high)
    {
     Swap(ref list[low],ref list[high]); 
     high--;
    }
   }
   return low;
  }

 }
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 眼睛进东西了弄不出来怎么办 18k金不给换黄金怎么办 我22岁欠了10万怎么办 1岁宝宝又吐又拉怎么办 月经10天了还没干净怎么办 舌头有异味怎么办是有口臭吗 快8个月羊水破了怎么办 25岁欠了50万债怎么办 28岁血压高150低压110怎么办 苹果6的4g网络慢怎么办 一个月染了6次头怎么办 五0二干在衣服上怎么办 刚怀孕见红了肚子不痛怎么办 我有外遇了老婆不离婚怎么办 套了牙套的牙疼怎么办 我鼻子上有很多螨虫和黑头怎么办 鱼刺卡在喉咙怎么办最有效的办法 脚被蚊子咬了很痒怎么办 好压7z密码忘了怎么办 4g卡显示2g网络怎么办 过塑机把纸吞了怎么办 红米1s开不了机怎么办 跟老婆吵架闹的要离婚该怎么办 充了q币没有到账怎么办 9个月宝宝吃了盐怎么办 红米4x开不了机怎么办 鱼身上有红斑像出血了怎么办 草鱼身上有红斑像出血了怎么办 宝宝屁眼红的破皮了怎么办 孩子身上起红疙瘩很痒怎么办 久而不射,但软了怎么办 盆底综合肌力1级怎么办 头发掉的厉害怎么办吃什么好 给蜂蛰了肿了痒怎么办 小米手环2没电了怎么办 小米手环2不亮了怎么办 红米3s无限重启怎么办 乐视手机1s卡顿怎么办 老公出轨了怎么办你会选择离婚吗 c盘和d盘换换了怎么办 晚上2点到3点醒怎么办