• 八大排序算法


    http://blog.csdn.net/hguisu/article/details/7776068/

    http://blog.sina.com.cn/s/blog_77795cad01011txt.html   时间复杂度

    快速排序算法的时间复杂度为什么是O(NlogN),还有O(N^2)       参考 http://blog.csdn.net/iihtd/article/details/51162106

    1.插入排序—直接插入排序(Straight Insertion Sort)

    #include <stdio.h>
    
    /* 从大到小排序 */
    void InsertSort(int iArray[], int iLen)
    {
        int m = 0,n = 0;
        int iSentry; /* 哨兵值 */
        
        for(m = 1; m < iLen; m++)
        {
            if(iArray[m] > iArray[m-1])
            {
                /* 直接插入排序要确定一个哨兵 */
                iSentry = iArray[m];
                n = m-1;
                
                while(iSentry > iArray[n])
                {    
                    iArray[n+1] = iArray[n];/* 元素后移*/
                    n--;
                    if(n < 0 )
                        break;
                }
                iArray[n+1] = iSentry;/* 哨兵值的赋值 */
            }
        }
    }
    
    int main(void)
    {
        int iArray[] = {1,55,2,3,6,5,90,5,2,100,102,9,103,444,5555};
        int iLen = 0;
        int i;
    
        iLen = sizeof(iArray)/sizeof(iArray[0]);
    
        InsertSort(iArray,iLen);
    
        for(i = 0; i < iLen; i++)
        {
            printf("%d
    ", iArray[i]);
    
        }
        
        return 0;
    }

    效率:

    时间复杂度:O(n^2)

    2.交换排序—冒泡排序(Shell`s Sort)

    /* 冒泡排序 */
    void BubbleSort(int iArray[], int iLen)
    {
        int m;
        int n;
        int iTemp;
        
        for(m = 0; m < iLen-1; m++)
        {
            for(n = 0; n < (iLen - m - 1); n++)
            {
                if(iArray[n] < iArray[n+1])
                {
                    iTemp = iArray[n+1];
                    iArray[n+1] = iArray[n];
                    iArray[n] = iTemp;
                }
            }    
        }    
    }

    3.选择排序—简单选择排序

    /* 选择排序 */
    /* 从数组中选择最大的数赋值给第一个元素,然后在剩下的元素中选择最大的数赋值给第二个元素*/
    int SelectMax(int iArray[], int iLen, int iStart)
    {
        int i;
        int iMaxNum;
    
        iMaxNum = iStart;
        for(i = iStart+1; i < iLen; i++)
        {
            if(iArray[iMaxNum] < iArray[i])
            {
                iMaxNum = i;
            }
        }
    
        return iMaxNum;
    }
    void SelectSort(int iArray[], int iLen)
    {
        int m;
        int iMaxNum = 0;
        int iTemp;
        /* 从第一个元素开始 */
        for(m = 0;m < iLen;m++)
        {
            /* 找到最大的值 */
            iMaxNum = SelectMax(iArray, iLen, m);
            if(iMaxNum != m)
            {
                iTemp = iArray[m];
                iArray[m] =  iArray[iMaxNum];
                iArray[iMaxNum] = iTemp;
            }
        }
    }
    void SelectSort1(int iArray[], int iLen)
    {
        int m,n;
        int iMaxNum;
        int iTemp;
        
        for(m = 0; m < iLen; m++)
        {
            iMaxNum = m;
            for(n = m+1; n < iLen; n++)
            {
                if(iArray[iMaxNum] < iArray[n])
                {
                    iMaxNum = n;
                }
            }
            iTemp = iArray[iMaxNum];
            iArray[iMaxNum] = iArray[m];
            iArray[m] = iTemp;
        }
    }
  • 相关阅读:
    Ubuntu: Set socks5 proxy for git
    Tornado实现一个消息墙。
    android 5.0开启google now 【需ROOT】
    python 回调函数
    php开发bug
    复习
    关于 xshell
    前端页面
    yii框架对数据库查询访问处理
    前端笔记
  • 原文地址:https://www.cnblogs.com/Deanboy/p/7567026.html
Copyright © 2020-2023  润新知