关于插入排序的实现

插入排序是排序算法中一个常见的算法,个人觉得插入排序和冒泡排序有很大的相同之处。先看两段代码:

1、来自http://www.cnblogs.com/xkfz007/archive/2012/07/01/2572017.html

void insert_sort(int a[],int n)
{
    _FUNC;
    for(int i=1;i<n;i++) {
        int t=a[i];
        int j;
        for(j=i-1;j>=0&&a[j]>t;j--) {
                a[j+1]=a[j];
        }
        a[j+1]=t;
        print(a,n);
    }
}

2、来源已经忘了

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

void swap(int *p1, int *p2)
{
      int temp;
      temp=*p1;
      *p1=*p2;
      *p2=temp;
}

void insertSort(int *a,int len)
{
      int i,j;
      for(i=0;i<len-1;i++)
      {
          for(j=i+1;j>=1;j--)
          {
              if(a[j]<a[j-1])
                   swap(&a[j],&a[j-1]);
          }
      }
}

int main()
{
    const int LEN=10;
    int a[LEN]={1,45,41,71,19,15,12,10,21,45};
    insertSort(a,LEN);
    for(int i:a){
        std::cout<< i << "   ";
    }
    std::cout<<std::endl;
}

第一段和第二段代码的思想差不多,都是不断的将后一个元素加入到前面已经排序好的数值中。其实说来,第二段代码还是比较清楚的,和冒泡排序比较像似。冒泡排序是下往上交换,而插入排序是每次把下一个元素泡到已经排好的序列当中。

原文地址:https://www.cnblogs.com/lishuai0214/p/4321953.html