| | | | | | | | | | | | | | |  
 
   收藏 |  网络安全 |  ASP技术 |  专业名词  |  资料下载 |  VB.NET技术 |  网络编程 |  网页设计 |  网站建设 |  c#.net技术 |  网络营销 |  网站推广 |
奇迹网络
技术园地
首页>>技术园地>>c#.net技术>>【算法】C#快速排序类
【算法】C#快速排序类
来源:本站原创 时间:2007-9-4 20:05:44 编辑:admin

快速排序的基本思想是基于分治策略的。对于输入的子序列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
{
 ///


 /// ClassQuickSort 快速排序。
 /// 范维肖
 ///

 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   {
    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   {
    while(low=pivot)
    {
     high--;
    }
    if(low!=high)
    {
     Swap(ref list[low],ref list[high]);
     low++;
    }
    while(low    {
     low++;
    }
    if(low!=high)
    {
     Swap(ref list[low],ref list[high]); 
     high--;
    }
   }
   return low;
  }

 }
}

 

 

 
   北京总部    太原分公司    English
北京网站建设 网站建设 北京网站制作 网站制作 北京网站建设 密云网站建设 网站建设 北京网站建设 北京网站制作 北京网站建设 上海网站建设 博网设计北京网站建设 上海网站建设 上海网站建设 深圳网站建设 网站制作

Copyright © 2007 Itqiji.com Inc. All rights reserved. 奇迹网络 版权所有

联系电话:010-80749631    010-82416384  
手   机:15001106568                                    
联系 QQ: 450338384奇迹网络     23287943奇迹网络 京ICP备05047545号
联系地址:海淀区上地信息路19号1号楼319                  
联系邮箱:qijiforever#yahoo.com.cn(把#换成@就可以了