八大排序算法

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;
    }
}
原文地址:https://www.cnblogs.com/Deanboy/p/7567026.html