标签:pre img while main turn for 直接插入排序 http before
因为复试时老师比较喜欢问排序算法那,所以 最近又把排序算法温习一遍,顺便写写代码。
1直接插入排序。
#include <stdio.h>
void InsSort(int r[], int n)
{
int i, j, temp;
for(i = 1; i < n; i++)
{
temp = r[i];
j = i - 1;
while(temp < r[j]) //寻找带插入的位置
{
r[j+1] = r[j];
j = j - 1;
}
r[j+1] = temp; //将数值插入已排序的队列中
}
}
void print(int r[], int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d ", r[i]);
puts("\n");
}
int main()
{
int a[10] = {3, 1, 5, 2, 7, 8, 9, 4, 6, 0};
printf("before sort:\n");
print(a, 10);
InsSort(a, 10);
printf("sort after:\n");
print(a, 10);
return 0;
}

如上述代码:temp变量用于放置带插入数值。
直接插入算法的空间复杂度O(1),因为只用到了1个变量
空间复杂度取决于待排序数列。最好的情况下移动次数 2 * (n-1), 最坏的情况下移动次数(n+4) * (n-1) / 2 , 平均复杂度n^2 / 4,因此时间复杂度位0(n^2)
标签:pre img while main turn for 直接插入排序 http before
原文地址:http://www.cnblogs.com/hello-lijj/p/7236447.html