C语言代码实现:
/*******************************************************
* Description: 直接插入排序算法
* Author: shujuxiong
* Version: 1.0
* Time: 2018-06-19
* Copyright:
*******************************************************/
#include<stdio.h>
//函数:打印数组
void PrintDataArray(int a[], int n)
{
for(int i=0; i<n; i++)
printf("%d, ",a[i]);
printf("\n");
}
//函数:交换数组元素
void swap(int *x, int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
//直接插入排序,版本1
void InsertSort1(int a[], int n)
{
int i,j,k;
for(i=1; i<n; i++)
{
//找到要插入的位置
for(j=0; j<i; j++)
{
if(a[j]<a[i])
continue;
//插入并后移剩余元素,后移元素的操作类似于冒泡排序
if(i != j)
{
int temp=a[i];
for(k = i-1; k>=j; k--)
a[k+1] = a[k];
a[j] = temp;
}
}
}
PrintDataArray(a, n);
}
//直接插入排序,版本2,搜索和后移同时进行
void InsertSort2(int a[], int n)
{
int i,j,k;
for(i=1; i<n; i++)
{
if(a[i]<a[i-1])
{
//插入并后移剩余元素
int temp = a[i];
for(j=i-1; j>=0 && a[j]>temp; j--)
{
a[j+1] = a[j];
}
a[j+1] = temp;
}
}
PrintDataArray(a, n);
}
//插入排序,版本3:用数据交换代替版本2的数据后移(比较对象只考虑两个元素),像冒泡排序?
//算法4中使用该方法
void InsertSort3(int a[], int n)
{
for(int i=1; i<n; i++)
for(int j=i-1; j>=0 && a[j+1]<a[j];j--)
{
swap(&a[j+1], &a[j]);
}
PrintDataArray(a, n);
}
//测试用例
int main()
{
int a[] = {3,1,7,5,2,4,9,6};
int len = sizeof(a)/sizeof(a[0]);
InsertSort1(a, len);
InsertSort2(a, len);
InsertSort3(a, len);
return 0;
}
运行结果:

Python 代码实现:
#!/usr/bin/python
# -*- coding: utf-8 -*-
##直接插入排序,版本1,最简单方式
def insertSort1(relist):
len_ = len(relist)
for i in range(1,len_):
for j in range(i):
if relist[i] < relist[j]:
relist.insert(j,relist[i]) # 首先碰到第一个比自己大的数字,赶紧刹车,停在那,所以选择insert
relist.pop(i+1) # 因为前面的insert操作,所以后面位数+1,这个位置的数已经insert到前面去了,所以pop弹出
break
return relist
##直接插入排序,版本2
def InsertSort2(myList):
length = len(myList)
for i in range(1,length):
j = i - 1
#如果当前值小于前一个元素,则将当前值作为一个临时变量存储,将前一个元素后移一位
if(myList[i] < myList[j]):
temp = myList[i]
myList[i] = myList[j]
#继续往前寻找,如果有比临时变量大的数字,则后移一位,直到找到比临时变量小的元素或者达到列表第一个元素
j = j-1
while j>=0 and myList[j] > temp:
myList[j+1] = myList[j]
j = j-1
#将临时变量赋值给合适位置
myList[j+1] = temp
#测试用例
def main():
myList = [49,38,65,97,76,13,27,49]
sortedlist=insertSort1(myList)
print(sortedlist)
if __name__ == ‘__main__‘:
main()
运行结果:

原文:https://www.cnblogs.com/shujuxiong/p/9201748.html