数据结构

排序算法

插入排序(耗时:118.90 ms 10000条数据)

从第二个数开始,跟前一个数比较,找到对应位置插入

int InsertSort(int *pArray, int MaxLen)
{
    int i = 0;
    int j = 0;
    int Temp = 0;

    for (j = 1; j < MaxLen; j++)
    {
        Temp = pArray[j];
        for (i = j; i > 0 && Temp < pArray[i-1]; i--)
        {
            pArray[i] = pArray[i-1];
        }
        pArray[i] = Temp;
    }

    return 0;
}
希尔排序(耗时:4.24 ms 10000条数据)

对每个子表进行插入排序,第一趟步长默认为n/2,第二趟步长为d/2,直至步长为1为止

int ShellSort(int *pArray, int MaxLen)
{
    int step = 0;
    int i = 0;
    int j = 0;
    int temp = 0;

    for (step = MaxLen / 2; step > 0; step /= 2)
    {
        for (j = step; j < MaxLen; j++)
        {
            temp = pArray[j];
            for (i = j; i >= step && temp < pArray[i-step]; i -= step)
            {
                pArray[i] = pArray[i-step];
            }
            pArray[i] = temp;
        }
    }

    return 0;
}
冒泡排序(耗时:323.57ms 10000条数据)

将待排序数列中的元素两两进行比较,直到将最大的数移动到末尾,一共进行n-1趟

int BubbleSort(int *pArray, int MaxLen)
{
    int j = 0;
    int i = 0;
    int temp = 0;

    for (j = 0; j < MaxLen-1; j++)
    {
        for (i = 0; i < MaxLen-1-j; i++)
        {
            if (pArray[i] > pArray[i+1])
            {
                temp = pArray[i];
                pArray[i] = pArray[i+1];
                pArray[i+1] = temp;
            }
        }
    }

    return 0;
}
选择排序(耗时:176.69 ms 10000条数据)

每次从待排序的数列中选出最小(或最大)的一个元素,存放在数列的起始位置,直到全部待排序的元素排完

int SelectSort(int *pArray, int MaxLen)
{   
    int Min = 0;
    int Temp = 0;
    int i = 0;
    int j = 0;

    for (j = 0; j < MaxLen-1; j++)
    {
        Min = j;
        for (i = j+1; i < MaxLen; i++)
        {
            if (pArray[i] < pArray[Min])
            {
                Min = i;
            }
        }
        if (Min != j)
        {
            Temp = pArray[j];
            pArray[j] = pArray[Min];
            pArray[Min] = Temp;
        }
    }

    return 0;
}
快速排序(耗时:2.07 ms 10000条数据)

选择一个基准元素,将列表中的元素分割为两部分,使得左边部分的所有元素小于基准元素,右边部分的所有元素大于基准元素,然后对这两部分分别进行递归排序。

int QuickSort(int *pArray, int Low, int High)
{
    int Key = 0;
    int j = High;
    int i = Low;

    Key = pArray[Low];
    while (i < j)
    {
        while (i < j && pArray[j] >= Key)
        {
            j--;
        }
        pArray[i] = pArray[j];
        while (i < j && pArray[i] <= Key)
        {
            i++;
        }
        pArray[j] = pArray[i];
    }
    pArray[i] = Key;

    if (i-1 > Low)
    {
        QuickSort(pArray, Low, i-1);
    }
    if (i+1 < High)
    {
        QuickSort(pArray, i+1, High);
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值