• 快速排序和插入排序


    #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;
    
  • 相关阅读:
    ASM实例远程连接
    ASM实例修改SYS密码
    监听lsnrctl status查询状态报错linux error 111:connection refused
    使用UTF8字符集存储中文生僻字
    Eclipse的概述
    java内部类
    Java----main
    移动客户端系统升级思路
    网站 压力测试。。检测 cdn 路由追踪 网速测试
    php实现树状结构无级分类
  • 原文地址:https://www.cnblogs.com/zechen11/p/2192869.html
Copyright © 2020-2023  润新知