算法描述如下:
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
6.重复步骤2~5
代码如下:
InsertionSort.c文件如下:
#include "InsertionSort.h" void InsertionSort(int nArray[],int n) { int i,j; int temp; for(j=1;j<n;j++)//默认为数组的最小长度是1,其实数组的长度可以是0的 { temp = nArray[j]; for(i=j-1;i>=0;i--) //for循环用于交换元素 { if(nArray[i]>temp) nArray[i+1]=nArray[i]; else break; } nArray[i+1]=temp;//被排序数放到正确的位置 } }
InsertionSort.h文件如下:
#ifndef _INSERTION_H_ #define _INSERTION_H_ void InsertionSort(int nArray[],int n); #endif //_INSERTION_H_
Test.c文件如下:
#include "InsertionSort.h" #include <stdio.h> int main() { int i; int nArray[]={1, 9, 5, 6, 8}; InsertionSort(nArray,sizeof(nArray)/sizeof(*nArray)); for(i=0;i<5;i++) { printf("%d ",nArray[i]); } return 0; }
Python代码InsertionSort.py如下:
#!/usr/bin/python Numbers = [3,1,9,4,7,0,2,5,6] print Numbers Len = len(Numbers) m = 1 while m < Len: temp = Numbers[m] n = m-1 while n >= 0: if Numbers[n] > temp: Numbers[n+1] = Numbers[n] n-=1 else: break Numbers[n+1]=temp m+=1 print Numbers