[算法天天见](一)基础排序

基础排序

一、说明

算法开篇,今后将会不定期更新。
算法最基础的就是排序,而排序中最基础的要属冒泡、插入和选择排序了,由于它们的时间复杂度都是 O(n²),所以在实际应用中几乎不会使用它们,而是采用更快的排序方法。不过在不少面试过程中,还是会遇到要求写出这种的情况,所以我们也是必须熟练掌握这些排序算法的思路。

二、算法

冒泡排序

/** * 冒泡排序是相邻的两个数据两两交换,直到有序 * [6,8,5,1] -> [6,5,1,8] ->[5,1,6,8]->[1,5,6,8] * 至少要循环 数组的长度-1 次才能满足最后得到的数组有序 * * 它是原地排序 所以空间复杂度是1 * 时间复杂度为 O(n²) * @param source * */		
		public function BubbleSort(source:Array):void
		{
			if(!source || source.length <= 1) return;
			var i:int = 0, j:int = 0;
			for( i = 0; i < source.length; i++)
			{
				for(j = 0; j < source.length - i - 1; j++)//每一次排序过后最后一个都是有序的所以没必要再去判断顺序了
				{
					if(source[j] > source[j + 1])
					{
						var temp:int = source[j];
						source[j] = source[j + 1];
						source[j + 1] = temp;
					}
				}
			}
		}

插入排序

/** * * 插入排序 * 就像玩家打扑克接牌一样, 每次接到的牌与玩家手中的牌做对比 * 找到要插入的位置,移动之后的牌挪出这个位置然后再执行插入 * * [10,5,8,6,3] -> [5,10,8,6,3] -> [5,8,10,6,3] -> [5,6,8,10,3] -> [3,5,6,8,10] * * 它是原地排序 所以空间复杂度是1 * 时间复杂度为 O(n²) * @param source * */		
		public function InsertionSort(source:Array):void
		{
			if(!source || source.length <= 1) return;
			var i:int = 0, j:int = 0;
			var value:int;
			for(i = 1; i < source.length; i++)
			{
				value = source[i];
				for(j = i - 1; j >= 0; j--)//这里用 -- 是为了方便移动, 如果采用++需要做很多额外操作
				{
					if(source[j] > value)
					{
						source[j + 1] = source[j];//移动位置
					}else
					{
						break;
					}
				}	
				source[j + 1] = value;
			}
		}

选择排序

/** * 选择排序 * 选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾 * [5,4,3,2,1] -> [1,4,3,2,5] -> [1,2,3,4,5] * * * 它是原地排序 所以空间复杂度是1 * 时间复杂度为 O(n²) * @param source * */		
		public function SelectionSort(source:Array):void
		{
			if(!source || source.length <= 1) return;
			var i:int = 0, j:int = 0;
			var mini:int;
			for(i = 0; i < source.length - 1; i++) //只需要遍历九次
			{
				mini = i;
				//找到未排序数组中的最小值
				for( j = i; j < source.length; j++)
				{
					if(source[j] < source[mini])
					{
						mini = j;
					}
				}
				//交换
				var temp:int = source[i];
				source[i] = source[mini];
				source[mini] = temp;
			}
		}
    原文作者:算法
    原文地址: https://www.twblogs.net/a/5bd3b00f2b717778ac20b2d9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞