【减治法】插入排序及C++代码实现

来源:互联网 发布:卷皮折扣和淘宝那个好 编辑:程序博客网 时间:2024/06/10 08:11

一、插入排序原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序核心:假设第一个元素排好,之后的元素对排好的部分从后向前比较并逐一移动。

以下面5个无序的数据为例:

65 27 59 64 58 (文中仅细化了第四次插入过程)

第1次插入: 27 65 59 64 58

第2次插入: 27 59 65 64 58

第3次插入: 27 59 64 65 58

第4次插入: 27 58 59 64 65

这里写图片描述

插入排序过程动画:

这里写图片描述

二、代码实现

伪代码:

InsertionSort(A[0..n-1])//用插入排序对给定数组排序//输入:n个可排序元素构成的一个数组A[0..n-1]//输出:非降序排列的数组A[0..n-1]for i <- 1 to n-1 do    v <- A[i]    j <- i-1while j>=0 and A[j]>v do    A[j+1] <- A[j]    j <- j-1A[j+1] <- v

代码实现

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