author: neumanndong
date: 2017/4/8 22:04
直接插入排序(Straight Insertion Sort):将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表
算法(C语言):
void InsertSort (SqList &L) {
for(i = 1; i < L.length; i++)
if(L.r[i].key < L.r[i-1].key; i++){
L.r[0] = L.r[i];
L.r[i] = L.r[i-1];
for (j = i - 2; LT(L.r[0].key,L.r[j].key); j--)
L.r[j+1] = L.r[j];
L.r[j+1] = L.r[0]
}
}
java版本:
public class Test {
public static void InsertSort(int SqList []) {
for(int i = 1; i < SqList.length; i++)
if(SqList[i] < SqList[i - 1]){
int temp = SqList[i];
int j;
for (j = i - 1;j >= 0 && temp < SqList[j] ; j--) //attention: j >=0 应该放在前面
SqList[j+1] = SqList[j];
SqList[j+1] = temp;
}
}
public static void main(String[] args) {
int arr[] = {49,38,65,97,76,13,27,49};
InsertSort(arr);
System.out.println("\n排序之后:");
for(int element : arr){
System.out.print(element+" ");
}
}
}
python 版本:
def InsertSort(SqList):
length = len(SqList)
for i in range(1,length):
if(SqList[i] < SqList[i-1]):
temp = SqList[i]
j = i - 1
while j >= 0 and SqList[j] > temp: #两个条件都满足
SqList[j+1] = SqList[j];
j = j - 1;
SqList[j+1] = temp
if __name__ == "__main__":
SqList = [49,38,65,97,76,13,27,49]
InsertSort(SqList)
for i in SqList:
print i
直接插入排序是 稳定排序
时间复杂度: 最好 O(n) 最坏 O(n*n) 平均O(n*n) 辅助 O(1)
**************************
You know some birds are not meant to be caged, their feathers are just too bright.
你知道,有些鸟儿是注定不会被关在牢笼里的,它们的每一片羽毛都闪耀着自由的光辉。