今天好好的學習了下關於排序的演算法,以下是一些總結,也算是一種鞏固。
首先排序演算法沒有什麼優劣之分,在不同的場景中,不同的排序演算法執行效率不同。
1.選擇排序(selection sort):
一次排序,可以將某個區間的最小值排列到該區域的第一位
例如:陣列[5, 1, 3, 2, 4, 6]
步驟一:選擇該陣列的最小值,一般設定為第乙個值5,
步驟二:將該值與下面的值比較,如果下面的值小,就互換值,否則不變,
例如:[5, 1, 3, 2, 4, 6] 中預設最小值為5,然後跟後續區域最小值互換即1。[1, 5, 3, 2, 4, 6]
[1, 5, 3, 2, 4, 6]找出下乙個區間[5, 3, 2, 4, 6]中預設最小值5,然後跟後續區域最小值互換即2,[2, 3, 5, 4, 6]
[2, 3, 5, 4, 6]找出下乙個區間[3, 5, 4, 6]中預設最小值3,然後跟後續區域最小值互換即4,沒他小,不換 [3, 5, 4, 6]後續以此類推
//var arr = [5, 1, 3, 2, 4, 6];顛倒陣列值
function
swap(arr, i1, i2) /**
* 選擇排序
* @param arr */
function
selectionsort(arr)
}swap(arr, i, index);
}}
selectionsort(arr);
console.log(arr)
2.氣泡排序(bubble sort):
一次氣泡排序,可以將某個區域序列的最大值排序到該區域的最後一位,具體的方式是:
將第1位和第2位比較,如果前者比後者大則交換
將第2位和第3位比較,如果前者比後者大則交換
依次類推,直到比較到該區域的最後兩位
重複上述過程,直到序列排序完成
例如:[5, 1, 3, 2, 4, 6]
第一次:[1, 5, 3, 2, 4, 6]
第二次:[1, 3, 5, 2, 4, 6]
第三次:[1, 3, 2, 5, 4, 6]
第四次:[1, 3, 2, 4, 5, 6] 以此類推
/** * 氣泡排序
* @param arr */
function
bubblesort(arr) }}
}var arr = [5, 1, 3, 2, 4, 6];
bubblesort(arr);
console.log(arr)
3.插入排序(insertion sort):
將序列分為兩個部分,一部分是有序的,一部分是無序的,現在要做的是,就是不斷的從無序的部分取出資料,加入到有序的部分,直到整個排序完成
原理:序列[5, 7, 2, 3, 6]
分為有序的序列和無序的序列 (5) (7 2 3 6)
不斷的擴充有序序列 (5 7) (2 3 6)
不斷的擴充有序序列 (2 5 7) (3 6)
不斷的擴充有序序列 (2 3 5 7) (6)
不斷的擴充有序序列 (2 3 5 6 7)
排序完成
程式寫法:
[5, 1, 3, 2, 4, 6],假設有序序列為(5,1,3),先儲存其以後的第乙個值arr[i]為temp=2,然後將temp和有序列表最後一位的前乙個的值比較,此時其最後一位的前乙個為1,比temp小,所以temp就放置在最後一位上,其原來的值放在有序列表最後,就會變成(5,1,2,3),迴圈後即可
/** * 插入排序
* @param arr */
function
insertionsort(arr)
else }}
}}var arr = [5, 3, 1, 6, 7, 4];
insertionsort(arr)
console.log(arr);
4.快速排序(quick sort):
選擇乙個數(比如序列的最後一位)作為基準數,將整個序列排序成兩部分,一部分比該數小,另一部分比該數大,基準數在中間,然後對剩餘的序列做同樣的事情,直到排序完成
例如:序列[5, 7, 2, 3, 6, 4]
選擇4作為基準數,排序成為:(3, 2) 4 (7, 6, 5)
對於3,2, 繼續使用該方式排序,得到: (2, 3) 4 (7,6,5)
對於7,6,5,繼續使用該方式排序,得到: (2, 3) 4 (5,6,7)
排序完成
functionquicksort(arr) arr
* @param start 開始下標
* @param end 結束下標
*/function
_quicksort(arr,start,end)
arr[low] = key;//
高位等於低位時,將基準值放入。
_quicksort(arr,start,low - 1);//
迴圈快速排序基準值左邊的陣列
_quicksort(arr,high+1,end);//
快速排序基準值右邊的陣列
}
_quicksort(arr,0,arr.length-1);
}var arr = [5, 1, 3, 2, 4, 6];
quicksort(arr);
console.log(arr)
你需要知道的加密演算法
既定需求a 加密用於達到以下目的 保密性 幫助保護使用者的標識或資料不被讀取。採取措施 雙向加密 資料完整性 幫助保護資料不被更改。採取措施 單項加密 md5雜湊 身份驗證 確保資料發自特定的一方。採取措施 數字簽名 不可否認性 防止特定的一方否認傳送過訊息。採取措施 公鑰加密 雙向加密原理簡析 圖...
前端需要知道的jinja2模板引擎知識
參考 訪問變數或變數的屬性 注釋 匯入另外乙個模板到當前模板中 匯入模板,與上面的有部分不同 繼承模板 訪問static資料夾中的檔案 建立乙個包含有所有公共元素的頁面基本骨架,在子模板中可以重用這些公用的元素。我們首先寫乙個名為 base.html 的模板,它包含下面的內容 lang en xml...
Sybase IQ,你需要知道的基礎
sybase iq,你需要知道的基礎 第一,知道iq跟其它的關係型資料庫相比,它的主要特徵是什麼?包括查詢快 資料壓縮比高 load快,但是插入更新慢,不太適合資料老是變化,它是按列儲存的。這時候你就知道它適做dss 決策支援系統 資料集市,資料倉儲,它不適合oltp。適合olap。第二,知道iq自...