1.插入排序
特点:算法较简单(类似扑克牌),但效率比较低,适合数据量较少(几千,几万),有序的数据。复杂度 O(n) O(n2) O(n2) 。
void sortInsert(int *dat, int size) { int i, pos; for (i = 1; i < size; i++) { pos = i - 1; int value = dat[i]; while (pos >= 0 && dat[pos] > value){ pos--; } pos++; memmove(dat + pos + 1, dat + pos, (i - pos) * sizeof(int)); dat[pos] = value; } }
测试:排序 100W 整型数据,约需 15min(用 sort 命令只需 2s!)
void sortInsert2(int *dat, int size) { int i, pos, value; for (i = 1; i < size; i++) { pos = i - 1; value = dat[i]; while (pos >= 0 && dat[pos] > value){ /* 相应元素后移一个位置 */ dat[pos + 1] = dat[pos]; pos--; } dat[pos + 1] = value; } }
测试:排序 100W 整型数据,约需 30min!!