C 实现的插入排序算法

插入排序算法的原理

有一个很形象的比喻,每次从牌堆里抽一张新牌时,左手一般拿着的是已经排好序的旧牌,有新牌来的时候,会不由自主的从右到左的插入进去.后续的牌按照这个规律下去,最后左手的牌都是排好序了.

现在用程序语言的角度来说明插入排序原理.


  • 从数组的第二位开始loop,这是外loop
  • 开启一个内loop,依次检查外loop当前数组值的左侧,如果比当前数组值大,则左侧值向右移动,直到碰到比当前值小的或者内loop结束,此时把当前值放入 左侧留下的空位.

下面是C 实现的完整代码

#include <stdio.h>

void insertSort(int *, int);  

int main()
{
    int i, n;
    int num[10];  

    while(scanf("%d", &n) != EOF)
    {
        //接收无序数据
        for(i = 0; i < n; i ++)
        {
            scanf("%d",num + i);
        }  

        //快速排序
        insertSort(num, n);  

        //打印输出
        for(i = 0; i < n; i ++)
        {
            printf("%d ",num[i]);
        }
        printf("\n");
    }  

    return 0;
}  

void insertSort(int *array, int len)
{
    int i, j, temp;  

    for(i = 1; i < len; i ++)
    {
        temp = array[i];
        for(j = i - 1; j >= 0; j --)
        {
            if(array[j] > temp)
            {
                array[j + 1] = array[j];
            }else
            {
                break;
            }
        }
        array[j + 1] = temp;
    }
}

运行实例

此处使用gcc编译,命令如下

gcc -o insertsort insertsort.c

最后直接在命令行里输入insertsort.exe即可.

时间: 2024-12-29 10:04:03

C 实现的插入排序算法的相关文章

c#冒泡、快速、选择和插入排序算法的项目应用

在之前的一篇文章里,我们简单地实现了对一维数组的四种排序算法,但是 在实际的项目中,我们排序的方式可能(几乎是一定)不止仅仅按照数字排序, 我们常常按照合适的需要的排序方式进行排序,比如航班信息可能按时间排序, 商品信息可能按价格排序等等.下面改进之前的那一篇"c#实现冒泡.快 速.选择和插入排序算法"里的代码,实现可以对不同对象(实例中是Car )的按照不同排序类型(实例中是价格和名称)的方式排序.好了,Code is cheap.看代码了: using System; using

JAVA实现插入排序算法

package Utils.Sort; /** *插入排序,要求待排序的数组必须实现Comparable接口 */ public class InsertSort implements SortStrategy { /** *利用插入排序算法对obj进行排序 */ public void sort(Comparable []obj) { if (obj == null) { throw new NullPointerException("The argument can not be null!

“插入排序”算法Java语言的实现与详解

插入排序算法是一个对少量元素进行排序的有效算法.插入排序的工作原理与打牌时整理手中的牌的做法类似,开始摸牌时,我们的左手是空的,接着一次从桌上摸起一张牌,并将它插入到左手的正确位置.为了找到这张牌的正确位置,要将它与手中已有的牌从右到左进行比较,无论什么时候手中的牌都是排序好的.     JAVA实现该算法如下: Java代码   public void insertSort(int a[]){           int length=a.length; //数组长度           in

JS折半插入排序算法实例_javascript技巧

本文实例讲述了JS折半插入排序算法.分享给大家供大家参考,具体如下: function pushArrayWithIndex(arr, index, value) { // 将元素添加到数组的指定位置 var temArr = arr.slice(0, index); temArr.push(value); return temArr.concat(arr.slice(index)); } /* test for pushArrayWithIndex var arr = [1, 2, 3, 4,

java实现插入排序算法_java

1.算法概念. 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序. 2.算法思想. 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成1个有序区,无序区为R[2..n].从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区. public static void insertSort(int[] array) { int len = array.length; for (int i = 1; i < len;

浅谈2路插入排序算法及其简单实现_C 语言

2路插入排序算法是在直接插入排序算法的基础上增加了一个辅助数组,其目的是减少排序过程中的移动次数,需要增加n个记录的辅助空间. 难点可能在于对取余的考虑吧,可以把辅助数组看成一个环状空间,这样就能更好的理解辅助空间中最大值和最小值的位置了. 算法整体思想还是很简单的,直接贴出可运行代码,注释还是挺清楚的,大家直接看就ok了 C语言实现示例 #include <stdio.h> #include <stdlib.h> void insert_sort(int *arr, int *t

Shell排序算法:一种经过改良的插入排序算法

Shell排序算法最初是由D.L Shell于1959年提出,假设要排序的元素有n个,则每个进行插入排序是 并不是所偶的元素同时进行,而是去一段间隔. Shell首先将间隔设定为n/2,然后跳跃的进行插入排序,再来将间隔设定为n/4,跳跃进行排序动作 ,再来设定时间间隔为n/8.n/16,知道间隔为1之后的最后一次排序终止,由于上一次的排序动作都会 将固定间隔内的元素排序好,所以当间隔为1之后的最后一次排序终止,由于上一次的排序动作都会将 固定间隔内的元素排序好,所以当间隔越来越小时,某些元素位

Java实现直接插入排序和折半插入排序算法示例_java

直接插入排序​1 排序思想: 将待排序的记录Ri插入到已经排好序的记录R1,R2,--,R(N-1)中. 对于一个随机序列而言,就是从第二个元素开始,依次将这个元素插入到它之前的元素中的相应位置.它之前的元素已经排好序. 第1次排序:将第2个元素插入到前边的有序列表(此时前边只有一个元素,当然是有序的),之后,这个序列的前2个元素就是有序的了. 第2次排序:将第3个元素插入到前边长度为2的有序列表,使得前2个元素是有序的. 以此类推,直到将第N个元素插入到前面长度为(N-1)的有序列表中. 2

详解直接插入排序算法与相关的Java版代码实现_java

直接插入排序 直接插入排序的思路很容易理解,它是这样的: 1.把待排序的数组分成已排序和未排序两部分,初始的时候把第一个元素认为是已排好序的. 2.从第二个元素开始,在已排好序的子数组中寻找到该元素合适的位置并插入该位置. 3.重复上述过程直到最后一个元素被插入有序子数组中. 4.排序完成. 示例:思路很简单,但代码并非像冒泡排序那么好写.首先,如何判断合适的位置?大于等于左边.小于等于右边?不行,很多边界条件需要考虑,而且判断次数太多.其次,数组中插入元素,必然需要移动大量元素,如何控制它们的