美文网首页
基础算法(排序)

基础算法(排序)

作者: 影醉阏轩窗 | 来源:发表于2018-08-30 11:03 被阅读0次

只记录了一半,实习又开始了~~接下来工作写论文+实习!!


冒泡排序

原理比较简单,直接看图撸代码就懂!

冒泡排序

希尔排序

想写代码直接写,不想写代码直接复制调试就懂原理了。

希尔排序
void ShellSort(int* list,unsigned int n)
{
    int step = n / 2;
    while (step>0)
    {
        for (size_t i = step; i < n; i++)
        {
            int x = list[i];
            int j = i - step;
            while (j>=0&&x<list[j])
            {
                list[j + step] = list[j];
                j = j - step;
            }
            list[j + step] = x;
        }
        step /= 2;
    }
}

堆排序


插入排序

比较简单

插入排序
void InsertSort(int array[],unsigned int n)
{
    int temp;
    for (size_t i = 1; i < n; i++)
    {
        temp = array[i];
        for (int k = i; k > 0 && temp < array[k-1]; k--)
        {
            array[k] = array[k-1];
            array[k-1] = temp;
        }
    }
}

快速排序

原数组:{3,7,2,9,1,4,6,8,10,5}

期望结果:{1,2,3,4,5,6,7,8,9,10}

快速排序 快速排序
void QuickSort(int* a,int low,int high)
{
    if (low >= high) return;
    int first = low;
    int last = high;
    int key = a[first];//记录关键数
    while (first < last)
    {//---核心代码,分治思想
        while (first < last&&a[last] >= key)
        {
            --last;
        }
        a[first] = a[last];
        while (first < last&&a[first] <= key)
        {
            ++first;
        }
        a[last] = a[first];
    }

    a[first] = key;
    QuickSort(a, low, first - 1);
    QuickSort(a, first + 1, high);
}

选择排序

原数组:{3,7,2,9,1,4,6,8,10,5}

和冒泡排序的原理差不多~~

选择排序

归并排序

原数组:{3,7,2,9,1,4,6,8,10,5}

我个人认为快速理解此算法的核心为:

  1. 原理(分治策略,几分钟就懂了)
  2. 分开(建立两个空间,把数组分开)
  3. 合并(也就是排序,自己拿个笔两个有序数组怎么合并排序?)
分治策略

注意这里的排序有可能短时间看不懂,自己用笔画一下就好了

【2,6,8】和【1,3,4】进行整合排序,

A. 首先要明白一点,左右都是有序的排列

B. 有序排列那么只需要比较最小(最大)的数据就可以了,其它的肯定是比他大(小)

C. 存储在新的数组里面OK

排序策略 归并排序
/归并排序
//将两个有序数组排序
void Merge(int *list, int start, int mid, int end)
{
    const int len1 = mid - start + 1;
    const int len2 = end - mid;
    const int len = end - start + 1;
    int i, j, k;

    int * front = (int *)malloc(sizeof(int)*len1);
    int * back = (int *)malloc(sizeof(int)*len2);

    for (i = 0; i<len1; i++)
        front[i] = list[start + i];
    for (j = 0; j<len2; j++)
        back[j] = list[mid + j + 1];
    // for循环里面的判断有点饶人
    //(i<len1||j<len2)和‘end+1’,是为了给【3,7】和【2】合并使用
    // 其它的都是正常的循环判断
    for (i = 0, j = 0, k = start; (i<len1||j<len2)&&k<end+1; k++)
    {   //i,j是新申请的堆空间的下标
        //k是list的下标
        if (front[i]<back[j]||j>=len2)
        {
            list[k] = front[i];
            i++;
        }
        else
        {
            list[k] = back[j];
            j++;
        }
    }
}

void MSort(int *list, int start, int end)
{
    if (start<end)
    {
        int mid = (start + end) / 2;
        MSort(list, start, mid);
        MSort(list, mid + 1, end);
        Merge(list, start, mid, end);
    }

}

基数排序

原数组:{3,7,2,9,1,4,6,8,10,5}

基数排序

参考链接

https://www.cnblogs.com/chengxiao/p/6129630.html

https://www.cnblogs.com/jingmoxukong/p/4308823.html

https://www.cnblogs.com/RainyBear/p/5258483.html

https://www.cnblogs.com/zyb428/p/5673738.html

https://blog.csdn.net/hf19931101/article/details/79077874

https://blog.csdn.net/zcyzsy/article/details/52761283

https://blog.csdn.net/ywcpig/article/details/52495553#commentBox

GIF动画来源网站

相关文章

  • 开发者应该掌握的几种排序算法

    该篇文章主要介绍了算法基础以及几种常见的排序算法:选择排序、插入排序、冒泡排序、快速排序、堆排序。 一、算法基础 ...

  • 算法-排序算法总结

    排序类型总结 1 排序算法基础实现 2 排序算法应用 2.1 基础排序 2.2 计数排序应用 2.3 快排应用 2...

  • 算法与数据结构(二):排序篇-O(n^2)算法:选择 &

    排序基础 O(n^2)的算法虽然简单,但也实用!让我们从最简单的基础排序算法开始,打开我们的算法大门! 排序算法 ...

  • 基础排序算法总结

    排序算法分为内部排序和外部排序,而我们经常说的基础排序算法,都是内部排序算法。包括冒泡排序,选择排序,插入排序,快...

  • 排序算法

    概述 一般排序算法(以元素比较为基础) => 快速排序、归并排序、插入排序、冒泡排序、堆排序 特殊排序算法 => ...

  • 算法汇总

    关于算法: 基础技巧:分治、二分、贪心排序算法:快速排序、归并排序、计数排序搜索算法:回溯、递归、深度优先遍历,广...

  • 插入排序算法实现

    排序算法是最常见,最基础的算法,作者文集中记录了两种排序算法(插入排序,归并排序) 插入排序算法实现很简单直接,附...

  • 排序算法总结

    基础排序算法 基础排序算法相关接口和实现类 接口: 实现类(后续排序的父类): 1.选择排序 两层循环:内层循环进...

  • 算法与数据结构简介

    0x01 算法 基础技巧:分治、二分、贪心 排序算法:快速排序、归并排序、计数排序 搜索算法:回溯、递归、深度优先...

  • 数据结构与算法—排序(下)

    在上一篇排序算法中介绍了3中基础排序算法:选择排序,插入排序,希尔排序。接下来介绍的两钟排序算法《归并排序》和《快...

网友评论

      本文标题:基础算法(排序)

      本文链接:https://www.haomeiwen.com/subject/vvjrwftx.html