直接插入排序

来源:互联网 发布:linux重启ntp服务命令 编辑:程序博客网 时间:2024/06/03 20:48

插入排序包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置) 。

直接插入排序:

最坏情况就是,序列是降序排列,需要进行n(n-1)/2次比较,如下:

void insert1(int *buf, int n) {    int i,j;    int tmp;    int count = 0;    for(i=1; i<n; i++) {        tmp = buf[i];        j = i-1;        while(printf("count:%d\n",++count) && j>=0 && tmp<buf[j]) {            buf[j+1] = buf[j];            j--;        }        buf[j+1] = tmp;    }}

最好情况就是,序列已经是升序排列了,在这种情况下,只要进行(n-1)次比较,如下:

void insert2(int *buf, int n) {    int i,j;    int tmp;    int count = 0;    tmp = buf[n-1];    j = n-2;    while(printf("count:%d\n",++count) && j>=0 && tmp<buf[j]) {        buf[j+1] = buf[j];        j--;    }    buf[j+1] = tmp;}


0 0
原创粉丝点击