快速排序

ContractedBlock.gifExpandedBlockStart.gifCode
using System;
using System.Collections.Generic;
using System.Text;

namespace Sort
ExpandedBlockStart.gifContractedBlock.gif
{
    
class Program
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
int[] A = new int[] {49,1,38,65,97,176,13,27,15,33,100,20,1,0,100,0,0,33,100,20,1};
           
// int[] A = new int[] {4,3,2,1 };
            QuickSort(A, 0, A.Length - 1);
           

        }

     
public static  void QuickSort(int[] A, int begin, int end) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
if (begin < end)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{

               
                
int q = Partition(A, begin, end);

                PrintArray(A, A.Length);  
//输出经过一趟快速排序后的结果

                QuickSort(A, begin, q 
- 1);

                QuickSort(A, q
+1, end);
            }

        }


      
public  static int Partition(int[] A, int begin, int end) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
           
            
int low, high;
           
            low 
= begin;
            high 
= end;
            
int x = A[low];
            
int xi=low;
            
int t;
            
while (low < high) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{

                
//从数值末向后搜索找到第一个比x小的数与x交换
                while (high >= 0 && A[high] >=&& low <= high) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    high
--;
                }

                  

                
if (high >= 0
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    t 
= A[high];
                    A[high] 
= x;
                    A[xi] 
= t;
                    xi 
= high;

                }


                
//从数组头开始找到第一个比x大的数与x交换
                while (low <= end && A[low] <&& low <= high) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    low
++;
                }


                
if (low < end) 
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{

                    t 
= A[low];
                    A[low] 
= x;
                    A[xi] 
= t;
                    xi 
= low;


                }


                
//if (low < high) 
                
//{
                
//    t = A[low];
                
//    A[low] = A[high];
                
//    A[high]=t;
                
//}
            
            }


            
return low;

        }


      
public static  void PrintArray(int[] A, int length) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
int i;
            
for (i = 0; i < length; i++
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                Console.Write(A[i]);
                Console.Write(
",");
             
            }


            Console.Write(
"\n");
        }


    }

}

转载于:https://www.cnblogs.com/smile2you/archive/2009/05/06/1450958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值