首页 > 编程语言 > 详细

排序总结(不断更新)

时间:2015-10-23 16:45:06      阅读:243      评论:0      收藏:0      [点我收藏+]

排序法

  最好时间分析 

最差时间分析

平均时间复杂度

稳定度

空间复杂度

冒泡排序

O(n)(改进的冒泡排序)

O(n2)

O(n2)

稳定

O(1)

快速排序


O(n2)

O(n*log2n)

不稳定

O(log2n)~O(n)

选择排序


O(n2)

O(n2)

不稳定(也可以有稳定的实现)

O(1)

二叉树排序


O(n2)

O(n*log2n)


O(n)

插入排序


O(n2)

O(n2)

稳定

O(1)

堆排序


O(n*log2n)

O(n*log2n)

不稳定

O(1)

希尔排序




不稳定

O(1)

冒泡排序:

冒泡排序算法的运作如下:(从后往前)

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码:

public void bubbleSort(int num[])
	{
		for (int i = 0; i < num.length; i++)
		{
			for (int j = 0; j < num.length - 1 - i; j++)
			{
				if (num[j] > num[j + 1])
				{
					int temp = num[j];
					num[j] = num[j + 1];
					num[j + 1] = temp;
				}
			}
		}
	}
性能分析:

需要n(n-1)/2比较,复杂度为O(n^2),最差最好都是O(n^2),空间复杂度为O(1),但是如果排好序的很明显一次都不用移动,应该是O(n)才对。

改进的冒泡排序:

加了一个标志位来判断是否有过交换。使最好的排序复杂度为O(n)

public void bubbleSort(int num[])
	{
		boolean swap = false;
		for (int i = 0; i < num.length; i++)
		{
			swap = false;
			for (int j = 0; j < num.length - 1 - i; j++)
			{
				if (num[j] > num[j + 1])
				{
					int temp = num[j];
					num[j] = num[j + 1];
					num[j + 1] = temp;
					swap = true;
				}
			}
			if (!swap)
			{
				break;
			}
		}
	}





排序总结(不断更新)

原文:http://my.oschina.net/hosee/blog/521245

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!