快速排序(数组)

#include <stdio.h> 
int a[101],n;//定义全局变量,因为这两个变量需要在子函数中使用 
void quicksort(int left,int right); 
int main() 
{ 
    int i,j,t; 
    scanf("%d",&n); 
    for(i=1;i<=n;i++) 
    scanf("%d",&a[i]); 
    quicksort(1,n); //快速排序调用 
                              
    for(i=1;i<=n;i++)
	{
		printf("%d ",a[i]);
	}  
    return 0; 
}
void quicksort(int left,int right) 
{ 
    int i,j,t,temp; 
    if(left>right) 
       return; 
                                
    temp=a[left]; //temp中存的就是基准数 
    i=left; 
    j=right; 
    while(i!=j) 
    { 
        //先从右边开始找 
        while(a[j]>=temp && i<j) 
        {
        	j--;
		}  
        //再找左边的 
        while(a[i]<=temp && i<j)
		{
			i++; 
		} 
        //交换两个数在数组中的位置 
        if(i<j) 
        { 
            t=a[i]; 
            a[i]=a[j]; 
            a[j]=t; 
        } 
    } 
    //最终将基准数归位 
    a[left]=a[i]; 
    a[i]=temp; 
                             
    quicksort(left,i-1);//递归处理左边 
    quicksort(i+1,right);//递归处理右边
}  

猜你喜欢

转载自blog.csdn.net/holly_z_p_f/article/details/79981815