[算法天天見](一)基礎排序

一、說明

算法開篇,今後將會不定期更新。
算法最基礎的就是排序,而排序中最基礎的要屬冒泡、插入和選擇排序了,由於它們的時間複雜度都是 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;
			}
		}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章