示例数组:3 1 4 5 9 2 6 8 7
标识为红色的为需要交换的元素
标识为蓝色的为比较的元素
定义:较小元素是小于或等于枢纽(pivot)的元素,较大元素为大于枢纽的元素(pivot)。
一开始,整个数组将看作为一个较大的分区(partition)。这时,两个坐标同时初始化,一个是由左向右搜索的坐标(我们假设为i),一个是由右向左搜索的坐标(我们假设为k)。
i的坐标是分区的第一个元素,现在为0,这时,k的值是8,分区的最后一个元素。
3 1 4 5 9 2 6 8 7
分区的第一个元素是3,选作枢纽(pivot),然后以这个枢纽为准,分成两个子分区。目标是让前面的分区元素都小于枢纽,但子分区没有特定的排序。
第一个元素3作为pivot元素,目标是前面的元素都比pivot元素要小。
这时,会先向右扫描,找出第一个比3大的元素。一旦找到了,它会从右边开始扫描出第一个比3小的元素。找到的这两个元素会相互交换。
因为现在i设为0,所以枢纽在寻找比它大的元素时会先和自己比较。
3 1 4 5 9 2 6 8 7
查找第一个比枢纽大的元素继续向右,i值随着向右继续增加。
3 1 4 5 9 2 6 8 7
因为4比枢纽3大,这时候向右搜索停止,这样,i的坐标为2。
3 1 4 5 9 2 6 8 7
现在,从数组的最后一个元素开始,查找第一个比枢纽小的元素。随着向左移动,k值不断减小。
3 1 4 5 9 2 6 8 7
3 1 4 5 9 2 6 8 7
3 1 4 5 9 2 6 8 7
因为2比枢纽3小,这时候向左的查找停止。k的坐标为5.
3 1 2 5 9 4 6 8 7
这时,元素2和4交换位置。(分别是位置i=2,k=5)
3 1 2 5 9 4 6 8 7
接着,查找从向右查找的坐标停止的位置继续向右。(i=2的位置)
3 1 2 5 9 4 6 8 7
马上,就找到了比枢纽(这时还是3)大的元素5(i=3),向右查找停止。
3 1 2 5 9 4 6 8 7
这时,向左的查找从刚才停止的位置继续向左扫描比枢纽3小的元素。
3 1 2 5 9 4 6 8 7
3 1 2 5 9 4 6 8 7
3 1 2 5 9 4 6 8 7
这时候比枢纽3小的元素找到了,但这个时候并不需要交换元素。但i的坐标设成k的。
意味着较小的元素已经在一边,较大的元素已经在另外一边。
2 1 3 5 9 4 6 8 7
剩下一样事情还需要做,就是交换枢纽和当前i指向的元素(i=2,上一步已将i的坐标设成和k的一样)。在这算法中,这种交换是有含义的,因为能保证左边的元素都小于枢纽(当前为3)。但他们各自的顺序暂不重要。现在坐标0到坐标(i-1)形成左分区。(k+1)之后的为右分区,包含全部大于枢纽的元素。
现在先对左分区进行排序(前两个)。
2 1 3 5 9 4 6 8 7
2选为枢纽,搜索时仍然先和自己比较。
2 1 3 5 9 4 6 8 7
然后查找到第二个元素(下标为1)比枢纽小。
因为左分区只有两个元素,向左查找的坐标从第二个元素开始,然后找到1。
1 2 3 5 9 4 6 8 7
这时候,左分区有一个元素(1),右分区没有元素。
然后对左分区进行排序,现在左分区只有一个元素,因此不需任何操作。
接着,对右分区(第3个到第8个元素进行排序)
1 2 3 5 9 4 6 8 7
选中5作为枢纽。
1 2 3 5 9 4 6 8 7
向右扫描的坐标马上找到9比5大。
1 2 3 5 9 4 6 8 7
向左扫描的坐标开始。
1 2 3 5 9 4 6 8 7
1 2 3 5 9 4 6 8 7
1 2 3 5 9 4 6 8 7
最后,找到元素4比枢纽5小。这时候k=5。
1 2 3 5 4 9 6 8 7
这样,第一个找到比5大的元素和比5小的元素交换位置。
1 2 3 5 4 9 6 8 7
向右搜索继续。
1 2 3 5 4 9 6 8 7
找到了比枢纽5大的元素9,向右搜索停止。
1 2 3 5 4 9 6 8 7
因为刚才k坐标停留在5的位置上,所以向左搜索从坐标5继续。
1 2 3 5 4 9 6 8 7
1 2 3 4 5 9 6 8 7
对于该分区,最后一步是将枢纽放到正确的位置。这时,左分区只有坐标为3的元素4,右分区是元素(9687)。
对左分区进行排序(坐标3到坐标3)
对右分区进行排序(坐标5到坐标8)
1 2 3 4 5 9 6 8 7
9选作枢纽。
1 2 3 4 5 9 6 8 7
向右查找第一个比9大的元素开始。
1 2 3 4 5 9 6 8 7
1 2 3 4 5 9 6 8 7
找不到比9更大的元素。
1 2 3 4 5 9 6 8 7
向左查找开始,但是不能继续,因为坐标i和k重合了。
1 2 3 4 5 7 6 8 9
枢纽9和k指向的元素7交换位置。对于子分区,这一步是最后的一步。
接着,我们对第5到第7个元素排序。
1 2 3 4 5 7 6 8 9
7选为枢纽。
1 2 3 4 5 7 6 8 9
向右查找找到8,停止。
1 2 3 4 5 7 6 8 9
向左查找开始。
1 2 3 4 5 7 6 8 9
找到了6,向左搜索停止,搜索坐标重合,不需要任何操作。
1 2 3 4 5 6 7 8 9
现在对左分区进行排序(只有元素6,不作任何操作)。
对右分区进行排序(只有元素8,不作任何操作)。
对元素9至8排序(不作任何操作)
1 2 3 4 5 6 7 8 9
最后,整个数组排序完成。
对于Office Server 2007 或者 WSS 3.0, 产生的日志文件体积都非常惊人,默认情况下,日志文件存在于C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\LOGS,




刚决定从
莫道不消魂巢" width="328" height="240">