码迷,mamicode.com
首页 > 编程语言 > 详细

重温排序算法

时间:2017-07-25 22:37:47      阅读:214      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!