文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>排序算法之快速排序

排序算法之快速排序

时间:2010-08-25  来源:FrogTan

   快速排序实现:

namespace QuickSort
{
    class QuickSort
    {
        public  static void Sort(int[] array)
        {
            DoSort(array,0, array.Length-1);
        }
        private static void DoSort( int[] array, int start, int end)
        {
            if( start < end)
            {
                int temp = Partition(array, start, end);

                DoSort(array, start, temp-1);
                DoSort(array, temp + 1, end);
            }
        }
        private static int Partition(int[] array,int start, int end)
        {
            int index = start - 1;

            for( var i=start; i< end; i++)
            {
                if( array[i] < array[end])
                {
                    index++;
                    Swap(array, index, i);
                }
            }

            Swap(array, index +1, end);

            return index + 1;
        }

        private static void Swap(int[] array,  int index1, int index2)
        {
            var temp = array[index1];
            array[index1] = array[index2];
            array[index2] = temp;
        }
    }
}

以上即为快速排序的代码,这里有两个重要的方法:

  1. Partition:该方法是以数组的某个元素为参考元素(轴元素或主元素),将数组划分成三个区域:

                  【<=参考元素】【参考元素】【>=参考元素】

2.   DoSort:该方法会调用Partition将数组分区,并在新产生的子数组上递归调用最终达到有序的目的。

  上面给出的代码是以数组最后一个元素作为参考元素,这仅是参考元素选取的方式之一。我们也可以随即选取数组的元素或者数组中间的元素作为参考元素。事实上参考元素的选取对快速排序的性能有很大影响。如果每次选取的参考元素能将数组分成相对均衡的区域,快速排序将成为最快的排序算法;但在另一种极端情形下,每次分成的数组都是1和n-1的关系,快速排序又会变的很慢。具体的性能数据后面再来讨论研究。

 

参考书籍:算法导论

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载