码迷,mamicode.com
首页 > 编程语言 > 详细

排序(插入排序,希尔排序,选择排序,堆排序)

时间:2016-06-01 07:00:34      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:工作原理   元素   

选择排序

工作原理:每一次从待排序的数据元素中选出最大或最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。


void SelectSort(int* a, size_t size)
{
    assert(a);

    for (int i = 0; i < size; i++)
    {
        int min = i;
        for (int j = i + 1; j < size; j++)
        {
        //选择最小元素
            if (a[j] < a[i])
            {
                min = j;
            }
        }
        //放在第i个位置
        if (a[i] != a[min])
        {
            int tmp = a[i];
            a[i] = a[min];
            a[min] = tmp;
        }
    }
}

堆排序

只需要


//升序
void AdjustDown(int* a, size_t size, int root)
{
    assert(a);

    int child = root * 2 + 1;
    while (child < size)
    {
        if (child + 1 < size && a[child + 1] > a[child])
        {
            child++;
        }

        if (a[child] > a[root])
        {
            swap(a[child], a[root]);
            root = child;
            child = root * 2 + 1;
        }
        else
        {
            break;
        }
    }
}

void AdjustUp(int* a, size_t size, int root)
{
    assert(a);

    int child = root * 2 + 1;
    while (child < size)
    {
        if (child + 1 < size && a[child + 1] < a[child])
        {
            child++;
        }

        if (a[child] < a[root])
        {
            swap(a[child], a[root]);
            root = child;
            child = root * 2 + 1;
        }
        else
        {
            break;
        }
    }
}

void Heap_Sort(int* a, size_t size)
{
    assert(a);
    
    //建堆
    for (int i = (size - 2) / 2; i >= 0; i--)
    {
        AdjustDown(a, size, i);
    }

    for (int j = size - 1; j > 0; j--)
    {
        swap(a[0], a[j]);
        AdjustDown(a, j, 0);
    }
}

void _Heap_Sort(int* a, size_t size)
{
    assert(a);

    for (int i = (size - 2) / 2; i >= 0; i--)
    {
        AdjustUp(a, size, i);
    }

    for (int j = size - 1; j > 0; j--)
    {
        swap(a[0], a[j]);
        AdjustUp(a, j, 0);
    }
}


本文出自 “写的质量还是低” 博客,谢绝转载!

排序(插入排序,希尔排序,选择排序,堆排序)

标签:工作原理   元素   

原文地址:http://10324228.blog.51cto.com/10314228/1784973

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!