【C/C+】快速並べ替えの2つの考え

8265 ワード

方法の1:絶えず穴を埋めて、一回で1つの値を確定します。http://blog.csdn.net/morewindows/article/details/6684558
#include<stdio.h>

void qsort(int *array, int len)
{
    int value, start, end;
    if (len <= 1) 
        return; 
    value = array[0]; 
    start = 0; 
    end = len - 1; 
    while (start < end) { 
        for (; start < end; --end) { 
            if (array[end] < value) { 
                array[start++]=array[end];  
                break; 
            } 
        } 
        for (; start < end; ++start) { 
            if (array[start] > value)
            {
                array[end--]=array[start]; 
                break;
            }
        }
    }
     array[start]=value; 
    qsort(array, start );
    qsort(array+start+1 , len-start-1 );
}

int main()
{
int a[10]={9,8,7,3,4,5,6,1,2,0};
qsort(a,10);
int i;
for(i = 0; i < 10; i++)
{
printf("%d ", a[i]);
} 
}
 
方法二:一回に二つの値を見つけて交換します。  http://developer.51cto.com/art/201403/430986.htm
#include <stdio.h> 
int a[101],n;//
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);//
} 
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]); 
    getchar();getchar(); 
    return 0; 
}