说来惭愧,大学这几年一直没怎么好好研究算法,趁着今年开了算法课,就好好的把算法给学一学,先从插入排序开始吧:
#include<stdio.h>
#include<stdlib.h>
#define random(x) (rand()%x)
int main()
{
// Get numbers
int i, j, key;
int array[100];
for (i = 0; i < 100; i++) {
array[i] = random(9999);
}
// Display the intial result
for (i = 0; i < 100; i++) {
printf("%d\n", array[i]);
}
printf("Init Completed");
// Then we peform insertion sort
for (i = 1; i < 100; i++) {
key = array[i];
for (j = i-1; j >= 0; j--) {
if (array[j] > key) {
array[j+1] = array[j];
} else {
break;
}
}
array[j+1] = key;
}
// Out put the sorted result
for (i = 0; i < 100; i++) {
printf("\n%d", array[i]);
}
}
基本上排序代码就中间的十行,还是算上了花括号的,思想很简单,从数组第一个数枚举到最后一个数,这是第一层循环,第二层循环找到已排序完成序列中新插入数的位置,并在寻找过程中不断把数的位置后移,这样就不断空出一个位置,直到找到这个位置后把新的key填入的这个位置。
空间复杂度O(n) 时间复杂度O(n^2)