摘要:百度渣渣搜出來的都是版本很少見簡單版本我正好自己搞了一版分享給你們冒泡排序交換和每次最大元素就像氣泡一樣浮到數組的最后依次比較相鄰的兩個元素使較大的那個向后移如果條件改成則變為不穩定的排序算法從小到大排序選擇排
百度渣渣搜出來的都是c,c++,java版本,很少見簡單js版本,我正好自己搞了一版,分享給你們
//1.冒泡排序 var exchange = function (a, i, j) // 交換A[i]和A[j] { var temp = a[i]; a[i] = a[j]; a[j] = temp; } var sort = function (a) { var n = a.length; for (var j = 0; j < n - 1; j++) // 每次最大元素就像氣泡一樣"浮"到數組的最后 { for (var i = 0; i < n - 1 - j; i++) // 依次比較相鄰的兩個元素,使較大的那個向后移 { if (a[i] > a[i + 1]) // 如果條件改成A[i] >= A[i + 1],則變為不穩定的排序算法 { exchange(a, i, i + 1); } } } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 從小到大排序 // console.log(sort(a)) //------------2.選擇排序------------ var exchange = function (a, i, j) // 交換A[i]和A[j] { var temp = a[i]; a[i] = a[j]; a[j] = temp; } var selectSort = function (a) { var n = a.length; var i, j, min; for (i = 0; i <= n - 2; i++) // 已排序序列的末尾 { min = i; for (j = i + 1; j <= n - 1; j++) { // 未排序序列 if (a[j] < a[min])// 依次找出未排序序列中的最小值,存放到已排序序列的末尾 { min = j; } } if (min != i) { exchange(a, min, i); // 該操作很有可能把穩定性打亂,所以選擇排序是不穩定的排序算法 } } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 從小到大排序 console.log(selectSort(a)) //-----------3.插入排序------------ var insertSort = function (a) { var n = a.length; var i, j, get; for (i = 1; i < n; i++) // 類似抓撲克牌排序 { get = a[i]; // 右手抓到一張撲克牌 j = i - 1; // 拿在左手上的牌總是排序好的 while (j >= 0 && a[j] > get) // 將抓到的牌與手牌從右向左進行比較 { a[j + 1] = a[j]; // 如果該手牌比抓到的牌大,就將其右移 j--; } a[j + 1] = get;// 直到該手牌比抓到的牌小(或二者相等),將抓到的牌插入到該手牌右邊(相等元素的相對次序未變,所以插入排序是穩定的) } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 從小到大排序 console.log(insertSort(a)) //-----------4.shell排序------------ var shellSort = function (a) { var n = a.length; var i, j, get; var h = 0; while (h <= n) // 生成初始增量 { h = 3 * h + 1; } while (h >= 1) { for (i = h; i < n; i++) { j = i - h; get = a[i]; while ((j >= 0) && (a[j] > get)) { a[j + h] = a[j]; j = j - h; } a[j + h] = get; } h = (h - 1) / 3; // 遞減增量 } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 從小到大排序 console.log(shellSort(a)) //-----------5.快速排序---------------- var exchange = function (a, i, j) // 交換A[i]和A[j] { var temp = a[i]; a[i] = a[j]; a[j] = temp; } var partition = function (a, left, right) // 劃分函數 { var pivot = a[right]; // 選擇最后一個元素作為基準 var tail = left - 1; // tail為小于基準的子數組最后一個元素的索引 for (var i = left; i < right; i++) // 遍歷基準以外的其他元素 { if (a[i] <= pivot) // 把小于等于基準的元素放到前一個子數組中 { tail++; exchange(a, tail, i); } } exchange(a, tail + 1, right); // 最后把基準放到前一個子數組的后邊,剩下的子數組既是大于基準的子數組 // 該操作很有可能把后面元素的穩定性打亂,所以快速排序是不穩定的排序算法 return tail + 1; // 返回基準的索引 } var quicksort = function (a, left, right) { var pivot_index; // 基準的索引 if (left < right) { pivot_index = partition(a, left, right); quicksort(a, left, pivot_index - 1); quicksort(a, pivot_index + 1, right); } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 從小到大排序 console.log(quicksort(a, 0, a.length - 1))
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83642.html
摘要:一名年工作經驗的程序員應該具備的技能,這可能是程序員們比較關心的內容。數據結構和算法分析數據結構和算法分析,對于一名程序員來說,會比不會好而且在工作中能派上用場。 一名3年工作經驗的Java程序員應該具備的技能,這可能是Java程序員們比較關心的內容。我這里要說明一下,以下列舉的內容不是都要會的東西—-但是如果你掌握得越多,最終能得到的評價、拿到的薪水勢必也越高。 1、基本語法 這包括...
摘要:注意啦,這個方法會改變原數組長度的,一般場合都用不到數組對象的方法方法將把它的參數插入的頭部,并將已經存在的元素順次地移到較高的下標處,以便留出空間。 平時工作中,少不了使用數組,對于后端的返回數據有時若不是符合dom樹渲染的數據前端還是會自己重新用后端返回數據重組來進行dom渲染。廢話不多說,我們先來看看數組所包含的方法,也許不是很全,不足處請大家補充,大家相互成長才是寫這篇文章的目...
摘要:中簡單搞定接口訪問,以及簡析掘金最近總結的一些經驗,對于或中使用接口的一些心得。這里,本文將數據結構之學習總結掘金前言前面介紹了的數據結構,今天抽空學習總結一下另一種數據結構。淺析事件傳遞掘金中的事件傳遞主要涉及三個方法和。 Android 系統中,那些能大幅提高工作效率的 API 匯總(持續更新中...) - 掘金前言 條條大路通羅馬。工作中,實現某個需求的方式往往不是唯一的,這些不...
閱讀 2574·2021-11-18 10:02
閱讀 1713·2021-09-30 10:00
閱讀 5310·2021-09-22 15:27
閱讀 1204·2019-08-30 15:54
閱讀 3671·2019-08-29 11:13
閱讀 2945·2019-08-29 11:05
閱讀 3319·2019-08-29 11:01
閱讀 569·2019-08-26 13:52