惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
aimingoo的专栏
aimingoo的专栏
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
J
Java Code Geeks
G
Google Developers Blog
N
Netflix TechBlog - Medium
Vercel News
Vercel News
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
罗磊的独立博客
GbyAI
GbyAI
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - stone

release 版本dll的调试 dead lock in thread pool Excel C# Automation 如何让iframe 自动适应窗口的高度 自定义Silverlight toolkit 里面的 Column Chart 的data point 二叉树算法题 How to do live debug the Managed code in Windows Phone 7 单链表操作相关算法 BUG: "Old format or invalid type library" error when automating Excel on 64 bit server 2008 - stone enable Assembly Load Trace 不合法的XML字符必须被替换为相应的实体 - stone - 博客园 如何修改 VS 自动生成的 COM interop dll VS中Sos调试扩展简介 (转帖) Sql server 2005 connection string - stone Get depth of BTree Quick sort C# code use the network trace, from msdn. - stone 字节流编码获取原来这么复杂,但也很简单 通过DataTable获得表的主键 让IE支持自己的协议
Quick sort C# code(2)
stone · 2008-07-01 · via 博客园 - stone

public class QuickSortNonRecursion
{
       public int Split(int[] data,int low,int high)
      {
                if(data == null) throw new ArgumentNullException();
                if(low<0 || high >= data.length) throw new ArgumentOutOfRangeException();

         int pivot = data[low];
         while(low < high){
                 while(low < high && data[high] >= pivot) high--;
                 data[low] = data[high];
                 while(low < high && data[low]<= pivot) low++;
                 data[high] = data[low];
         }
          data[low] = pivot;
          return low;
}

public void QuickSort(int[] data, int low, int high)
{
        if(low < high)
        {
              Stack<int> stc = new Stack<int>();
              int pivot = Split(data,low,high);
              stc.push(low);
              stc.push(pivot -1);
              stc.push(pivot +1);
              stc.push(high);

              while(stc.count>0)
              {
                    high = stc.pop();
                    low = stc.pop();
                    int temp;
                    if(low<high)
                    {
                         pivot = Split(data,low,high);
                         temp = pivot-1;
                         if(low < pivot)
                         {
                               stc.push(low);
                               stc.push(temp);
                         }
                         temp = pivot +1;
                         if(high>pivot)
                         {
                               stc.push(temp);
                               stc.push(high);
                         }
                     }
              }
         }
}