• 数据结构与算法分析-插入排序


    我们先来看一种最简答的排序方法-插入排序,插入排序通过N-1趟(Pass)排序组成,如P代表趟数,那么我们一共要从P=1到P=N-1,每一趟排序,我们可以保证从位置0到位置P-1也就是前P个元素都已经是排好序的。方法就是在第P趟时将位置P上的元素放入前P个元素组成的排序队列中去,使得前P+1个元素继续保持顺序状态,因此问题的关键就是找到P位置上的元素应该插入到排序队列的哪个位置,我们需要遍历前P个元素,把所有比P元素大的元素向右移动(假如我们是从小到大排序),然后把P元素放在空出来的哪个位置上。那么N-1趟以后,序列自然就成了排序序列。</span>

    具体实现方法如下:

    首先我们在头文件中声明插入排序原型。

    /**
    * @file    Sort.h
    * @brief   常用排序-声明部分
    * @details
    * @author  jason.mrbourne@gmail.com
    * @date    2014-5-20
    */
    #ifndef SORT_H_INCLUDED
    #define SORT_H_INCLUDED
    
    typedef int ElementType;
    void InsertionSort(ElementType A[], int N); //插入排序
    
    
    #endif // SORT_H_INCLUDED

    然后再Sort.c源文件中实现插入排序。

    /**
    * @file    Sort.c
    * @brief   常用排序-实现部分
    * @details
    * @author  jason.mrbourne@gmail.com
    * @date    2014-5-20
    */
    #include <Sort.h>
    
    //插入排序
    void InsertionSort(ElementType A[], int n)
    {
        int j, P;   //P代表当前趟数
    
        ElementType Tmp;    //P位置上的元素
        for (P = 1; P < n; P++)
        {
            Tmp = A[P];
            //A[j-1]是P前P个元素 将其中比A[P]大的右移
            for (j = P; j > 0 && A[j-1] > Tmp; j--)
                A[j] = A[j-1];
            //当前j-1处是第一个不比A[P]大的位置 应该把A[P]放到它后面 即j处
            A[j] = Tmp;
        }
    }

    最后我们在主程序中测试其可行性。

    /**
    * @file    main.c
    * @brief   常用排序-测试部分
    * @details
    * @author  jason.mrbourne@gmail.com
    * @date    2014-5-20
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <Sort.h>
    
    int main()
    {
        //用插入排序排序数组a
        int a[5] = {2,5,3,6,1};
        int i;
        InsertionSort(a,5);
        for (i = 0; i <5; i++)
            printf("%d	", a[i]);
        return 0;
    }



  • 相关阅读:
    图论分支-Tarjan初步-边双联通分量
    图论分支-Tarjan初步-割点和割边
    简谈图论重要性&&图论总结
    Angular本地数据存储LocalStorage
    (转)AngularJS中使用的表单验证
    (转)AngularJS判断checkbox/复选框是否选中并实时显示
    (转载)JavaScript世界万物诞生记
    (转载)关于My97 datepicker与Angular ng-model绑定问题解决。
    mysql
    mysql
  • 原文地址:https://www.cnblogs.com/mrbourne/p/9959457.html
Copyright © 2020-2023  润新知