**:演算法(algorithms)基礎之:插入排序 — 沒那麼簡單的部落格
插入排序,對於少量的元素的資料,它是乙個有效的演算法。它的工作方式就像許多人排序一副撲克牌。開始時,我們的左手為空並且桌子上的牌面向下。然後,我們每次從桌上拿走一張牌並將它插入左手中正確的位置。為了找到一張牌的正確位置,我們從右往左將它與已在手中的每張牌進行比較,拿在左手上的牌總是排序好的。如圖:假定陣列a[5, 2, 4, 6, 1, 3]是需要排序的資料, 長度為6,用php實現如下:
演算法思路:<?php
執行結果如下:<?php
/** * 插入排序[正序]
* author: n******
* date: 2016/11/16
* link:
*/$arr = [5, 2, 4, 6, 1, 3];
$len = count($arr);
$step = 0;
for ($i = 1; $i
< $len; $i++)
$arr[$j+1] = $key;
process($step, $arr);
}//記錄排序步驟
function
process
(&$step, $arr = array())
第1步排序:array
( [0] => 5
[1] => 2
[2] => 4
[3] => 6
[4] => 1
[5] => 3
)第2步排序:array
( [0] => 5
[1] => 4
[2] => 2
[3] => 6
[4] => 1
[5] => 3
)第3步排序:array
( [0] => 6
[1] => 5
[2] => 4
[3] => 2
[4] => 1
[5] => 3
)第4步排序:array
( [0] => 6
[1] => 5
[2] => 4
[3] => 2
[4] => 1
[5] => 3
)第5步排序:array
( [0] => 6
[1] => 5
[2] => 4
[3] => 3
[4] => 2
[5] => 1
)
for($i = 1; $i
< $len; $i++)
3. 當第1次參考值比較完之後,需要把參考值插入到最後乙個比參考值大的元素a[j+1]的位置上:
$arr[$j + 1] = $key;
這樣左側的元素就依次排好了~
用go實現如下:
/*
插入排序[正序]
author: n******
date:2023年11月17日17:39:29
link:
*/package main
import (
"fmt"
)/*追蹤排序步驟*/
func showstep(args int, step *int)
/*插入排序[asc正序]*/
func insertsort(args ...int)
args[j+1] = key
showstep(args, p)
}}func main()
insertsort(arr...)
}
執行結果:
d
:/go/bin/go.exe build -i [d
:/go_workspace/algorithms]
success
: process exited with code 0.
d:/go_workspace/algorithms/algorithms.exe [d
:/go_workspace/algorithms]
第1步排序結果:[254
613]第2步排序結果:[245
613]第3步排序結果:[245
613]第4步排序結果:[124
563]第5步排序結果:[123
456]success
: process exited with code 0.
演算法 algorithms 基礎之 選擇排序
演算法 algorithms 基礎之 選擇排序 沒那麼簡單的部落格 陣列a中有n個數,首先找出a中的最小元素並將其與a 1 中的元素進行交換。接著,找出a中的次最小原始並將其與a 2 中的元素進行交換。對a中前n 1個元素按該方式繼續。該演算法稱為選擇演算法。假定陣列a 5,2,4,6,1,3 是需...
STL演算法 Algorithms 極值
stl演算法 algorithms 極值 1 min 返回兩個兩個引數中的最小值 原型 template const t min const t a,const t b template const t min const t a,const t b,compare comp 示例 min exam...
C 基礎之演算法
演算法 一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。其中演算法有五個特徵 1 有窮性 演算法中每條指令的執行次數有限,執行每條指令的時間有限 2 確切性 演算法的每一步驟必須有確切的定義 3 輸入 乙個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演...