排序算法之快速排序(QuickSort)

    快速排序又称分区交换排序,是目前已知的平均速度最快的一种排序算法,它是对冒泡排序的一种改进。该算法的基本思想是:从待排序的n个记录中任意选取一个记录R(通常是序列中的第一个元素)作标准,调整序列中各个记录的位置,使R前面的记录的关键字都比它小,后面的关键字都比它大,这样的一个过程称为一次快速排序。然后对两边的记录再同样分别进行这样一个过程,直到各个子序列的长度为1时,排序完毕。

    算法如下:

#include  " stdafx.h "

void  QuickSort( int  a[], int  low, int  high)
{  
    
    
int  k = low; // 保存当前空位
     int  i = low,j = high;
    
int  key = a[low];
    
    
while (i < j)
    {       
        
        
while (i < j)
        {
            
if (a[j] < key)
            {
                a[k]
= a[j];
                k
= j;
                
break ;
            }        
            j
-- ;
        }
        
        
while (i < j)
        {
            
if (a[i] > key)
            {
                a[k]
= a[i];
                k
= i;
                
break ;
            }
            i
++ ;
        }
    }
    
    a[k]
= key;
    
    
if (low < k - 1 ) QuickSort(a,low,k - 1 );
    
if (high > k + 1 ) QuickSort(a,k + 1 ,high);
}

int  _tmain( int  argc, _TCHAR *  argv[])
{
    
int  a[] = { 21 , 56 , 23 , 90 , 25 , 76 , 19 , 44 , 98 , 8 , 77 , 0 };
    QuickSort(a,
0 , 11 );
    
for ( int  i = 0 ;i < 12 ;i ++ )
    {
        printf(
" %d, " ,a[i]);
    }
    getchar();
    
return   0 ;

} 

你可能感兴趣的:(Quicksort)