重温排序算法

因为复试时老师比较喜欢问排序算法那,所以 最近又把排序算法温习一遍,顺便写写代码。

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)

 

posted @ 2017-07-25 20:59  大波非猫  阅读(193)  评论(0编辑  收藏  举报