復雜了解拔出排序算法及Swift版的代碼示例。本站提示廣大學習愛好者:(復雜了解拔出排序算法及Swift版的代碼示例)文章只能為提供參考,不一定能成為您想要的結果。以下是復雜了解拔出排序算法及Swift版的代碼示例正文
算法思想
拔出排序的方式相似平常打撲克牌的時分排序自己手中的撲克牌。開端時,我們左手中沒有牌,桌上有洗好的撲克牌,我們抓取一張撲克牌並放入左手的正確地位。為了找到一張撲克牌的正確地位,我們從右到左將它與手中的每張牌停止比擬,左手上的牌總是排序好的,而這些牌原來都是桌上牌堆中頂部的牌,當我們抓完牌時,左手中的牌自然是有順序的。
之所以叫拔出排序,不是為別的,正是由於該算法的中心就是將無序的元素拔出排好序的局部。
拔出排序的中心思想即在於劃分已排序和未排序,將每個待排序的元素逐一與已排序的元素比擬,找出恰當的拔出地位,拔出元素,循環操作至完畢
這裡是一張拔出排序的運用流程,在寫代碼前先感受一下。
我們以一維數組作為待排序的數據源,整個數組的以第一個待排序的元素為分水嶺,前半局部為已排好序的,後半局部是等候排序的; 開端排序時,從第二個元素開端循環開端,由於需求記載以後待排序的元素,我們引入一個變量記載分水嶺的下標,也就是上面源碼內的變量i; 比擬的進程比擬直接,從分水嶺往前,逐一比擬值的大小,沒找到需求拔出的地位時向後挪動元素,知道找到地位拔出元素;
完成代碼
1.由小到大排序:
func insertionSortBigger(var array: Array<Int>) -> Array<Int>{ for(var j = 1 ; j<array.count ; j++){//從第二個開端向前比照拔出 let key = array[j] //記載要比擬的值 var i = j-1 while(i>=0 && array[i]>key){//假如key較小,那麼現有的地位向後移,為key空出地位 array[i+1] = array[i] //移位 i-- } array[i+1] = key } return array }
2.由大到小排序:
func insertionSortSmaller(var array: Array<Int>) -> Array<Int>{ for(var j = 1 ; j<array.count ; j++){//從第二個開端向前比照拔出 let key = array[j] //記載要比擬的值 var i = j-1 while(i>=0 && array[i]<key){//假如key較大,那麼現有的地位向後移,為key空出地位 array[i+1] = array[i] //移位 i-- } array[i+1] = key } return array }