我的代码执行环境:
操作系统:OS X Yosemite
python版本2.7.6
微信公众平台:今天做了没
插入排序,百度百科解释:
http://baike.baidu.com/view/396887.htm
我自己的理解:就像大家总是举的例子一样,我们打扑克,在拿到牌后都要按大小顺序排好,拿到一张新牌,就放到已经有了的牌的合适位置(就是按大小排序),那么,当你在往已有的牌里插入的时候,后面的牌相对来说,都是向后移了一个位置。保持这么做,当放好最后一张牌时,你已经有一个副排好顺序的牌了。
那么来看C语言的实现:
#include <stdio.h> #include <stdlib.h> #include <time.h> void insert_sort(int *numbers, int len) { int i, j, k; for (i = 1; i < len; i ++) { /* k就相当于新拿到的牌 */ k = numbers[i]; /* 用k和所有已经排好序的牌比较,插入的合适的位置, * 在这个过程中所有比k大的都要向后移一个位置 */ for (j = i - 1; j >= 0; j --) { if (numbers[j] > k) { numbers[j+1] = numbers[j]; numbers[j] = k; } } } } int main(int argc, char *argv[]) { int numbers[10]; int i; srand(time(NULL)); for (i = 0; i < 10; i ++) { numbers[i] = rand() % 100 + 1; } for (i = 0; i < 10; i ++) { printf("numbers[%d] = %d\n", i, numbers[i]); } insert_sort(numbers, 10); for (i = 0; i < 10; i ++) { printf("numbers[%d] = %d\n", i, numbers[i]); } return 0; }
还是C语言实现起来代码就是比较多,如果用高级语言就几行代码就可以了,下面是Python的实现:
#coding:utf-8 #如果要用中文注释需要上面那行,要不然报错(python2.7.6) import random def insert_sort(numbers): total = len(numbers) for i in range(1, total): #这就是新拿到的牌 k = numbers[i] #下面range(0,i)[::-1]是逆序使用列表,因为原本序列 #就是不包含i,所以不用range(0,i-1) for j in range(0, i)[::-1]: if numbers[j] > k: numbers[j+1] = numbers[j] numbers[j] = k return numbers numbers = range(1, 20) random.shuffle(numbers) print numbers print insert_sort(numbers)
原文:http://my.oschina.net/bxxfighting/blog/515801