C插入排序

#include <stdio.h>
#include <stdlib.h>
typedef struct Elem
{
     int a;
     int b;
}Elem;
int issort(void *data, int size, int esize, int (*compare)(const void *key1, const void *key2))
{
     char *a = data;
     void *key;
     int i,j;
     if((key = (char *)malloc(esize)) == NULL)
          return -1;

     for(j = 1; j < size; ++j)
     {
          memcpy(key, &a[j * esize], esize);
          i = j - 1;
          while(i >= 0 && compare(&a[i * esize], key) > 0){
               memcpy(&a[(i + 1) * esize], &a[i * esize], esize);
               i--;
          }

          memcpy(&a[(i + 1) * esize], key, esize);
     }
     free(key);

     return 0;
}
int compare_elem(const Elem *key1,const Elem *key2){
     return (*key1).a > (*key2).a ? 1:-1;
}
int main(int argc, char *argv[])
{
     Elem data[5]={{1,3},{45,4},{33,22},{66,44},{45,0}};
     issort(&data, 5, sizeof(Elem), compare_elem);
     for(int i = 0; i < 5; ++i)
     {
          printf("%d %d\n", data[i].a, data[i].b);
     }
     return 0;
}

直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。

设数组为a[0…n-1]。

1.      初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1

2.      将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。

3.      i++并重复第二步直到i==n-1。排序完成。

偏个题~用python实现下

#!/usr/bin/python
# -*- coding: utf-8 -*-

__author__ = 'kirchhoff'


def issort(list):
    for i in range(1, len(list)):
        key = list[i]
        j = i - 1
        while j >= 0 and list[j] > key:
            list[j + 1] = list[j]
            j -= 1
        list[j + 1] = key


if __name__ == '__main__':
    list = [3, 4, 6, 0, -4]
    issort(list)
    for i in list:
        print i,



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值