快速排序和插入排序

#include <stdlib.h>
#include <stdio.h>

typedef int ElementType;

void swap( int *a, int *b )
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

ElementType middian( ElementType a[], int start, int end )
{
    int center = ( start + end ) / 2;
    if( a[start] > a[center] )
        swap( &a[start], &a[center] );
    if( a[start] > a[end] )
        swap( &a[start], &a[end] );
    if( a[center] > a[end] )
        swap( &a[center], &a[end] );
    swap( &a[center], &a[end-1] );
    return a[end-1];
}

void sort( ElementType a[],int start, int end )
{
    ElementType temp;
    if( start >= end ) return;
    int i, j;
    for( i=start+1; i<=end; i++)
    {
        temp = a[i];
        for( j=i; j>start; j--)
        {
            if( a[j-1]>temp )
                a[j] = a[j-1];
            else
                break;
        }
        a[j] = temp;
    }
}

void Qsort( ElementType a[], int start, int end )
{
    ElementType pivot;
    int i, j;
    if( start + 3 < end )
    {
        pivot = middian( a, start, end );
        i = start;
        j = end-1;
        for( ; ; )
        {
            while( a[++i] < pivot ) ;
            while( a[--j] > pivot ) ;
            if( i < j )
                swap( &a[i], &a[j] );
            else
                break;
        }
        swap( &a[end-1], &a[i] );
        Qsort( a, start, j );
        Qsort( a, i+1, end );
    }
    else
        sort( a, start, end );
}

int main()
{
    ElementType b[20] = {12,24,48,26,47,52,13,486,426,14,
                         28,476,264,452,57,19,49,26,475,954};
    int i;
    Qsort( b, 0, 19 );
    for( i=0; i<20; i++ )
        printf("%d\t",b[i]);
    sort( b, 0, 19 );
    for( i=0; i<20; i++ )
        printf("%d\t",b[i]);
    return 0;
原文地址:https://www.cnblogs.com/zechen11/p/2192869.html