直接插入排序

来源:互联网 发布:认证报名保存数据失败 编辑:程序博客网 时间:2024/05/29 03:40

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] = tempif __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. 

你知道,有些鸟儿是注定不会被关在牢笼里的,它们的每一片羽毛都闪耀着自由的光辉。


0 0
原创粉丝点击