摘要:冒泡排序循環(huán)的最大值從遞減基本就是每次循環(huán)只能排好最后一個(gè)然后遞減到第一個(gè)冒泡調(diào)用選擇排序外循環(huán)選取當(dāng)前元素到內(nèi)循環(huán)開始到逐個(gè)比較出最小值交換和選擇調(diào)用插入排序從下標(biāo)開始往后選擇直到最后每個(gè)選中的和他前面的所有比較直到找到比他小的排
// 冒泡排序
// 循環(huán)的最大值從length遞減
// 基本就是每次循環(huán)只能排好最后一個(gè) 然后遞減到第一個(gè)
function bubbleSort(){ var changedData = new Array(); var index = 0; console.log("冒泡調(diào)用"); for (var j = a.length; j >0 ; j--) { for (var i = 0; i < j; i++) { if(a[i]>a[i+1]){ var z = 0; z = a[i+1]; a[i+1] = a[i]; a[i] = z; } changedData[index] = a.toString(); index++; }//one }//two showDateChange(changedData); }
// 選擇排序
// 外循環(huán) j選取當(dāng)前元素 到length-1
// 內(nèi)循環(huán) j+1開始 到length 逐個(gè)比較出最小值min
// 交換 min 和 a[j]
function selectionSort(){ var changedData = new Array(); var index = 0; console.log("選擇調(diào)用"); for (var j = 0; j < a.length-1; j++) { var min = a[j]; var minIndex = j; for (var i = j+1; i < a.length; i++) { if(a[i] < min) { min = a[i]; minIndex = i; } }//one a[minIndex] = a[j]; a[j] = min; // changedData[index] = a.toString(); index++; }//two showDateChange(changedData); }
// 插入排序
// 從下標(biāo)1開始 往后選擇直到最后
// 每個(gè)選中的和他前面的所有比較
// 直到找到比他小的 排在他后面
// 相當(dāng)于從1開始 每次都排好之前的i+1個(gè) 直到length
// 和冒泡相反
function insertionSort(){ var changedData = new Array(); var index = 0; console.log("插入排序"); for (var j = 1; j < a.length; j++) { var now = a[j]; var i = j - 1; while(i>=0 && now// 希爾排序
// 間隔改變的插入排序
// 傳統(tǒng)插入排序 比較前面的相鄰對(duì)象
// 希爾排序比較前面的第h個(gè)對(duì)象 直到h間隔不存在更改
// 改變h 直到 h=1function shellSort(){ var changedData = new Array(); var index = 0; console.log("希爾排序"); var N = a.length; var h = 1; if (h < N/3) { h = h*3 + 1;//設(shè)置間隔 } while(h > 0){ for (var j = h; j < a.length; j++) { for (var i = j;i >= h && a[i] < a[i-h]; i -= h) { var z; z = a[i]; a[i] = a[i-h]; a[i-h] = z; // changedData[index] = a.toString(); index++; } } h = (h-1)/3;//改變間隔 } showDateChange(changedData); }// 歸并排序
// 數(shù)據(jù)分為 step為間隔的小數(shù)組
// 將小數(shù)組排序 step變大 直到為1/2個(gè)數(shù)組
// 將前后兩個(gè)已排序的數(shù)組 再排序function mergeSort(arr){ var changedData = new Array(); console.log("歸并排序"); if (arr.length < 2) { return; } var step = 1; var left; var right; while(step < arr.length){ left = 0; right = step; while(right + step <= arr.length){ mergeArrays(arr,left,left+step,right,right+step); left = right + step; right = left + step; } if (right < arr.length) { mergeArrays(arr,left,left+step,right,arr.length); } step *= 2; } function mergeArrays(arr,startLeft,stopLeft,startRight,stopRight){ var leftArray = new Array(stopLeft - startLeft +1); var rightArray = new Array(stopRight - startRight +1); k = startRight; for (var i = 0; i < rightArray.length-1; i++) { rightArray[i] = arr[k]; k++; } k = startLeft; for (var i = 0; i < leftArray.length-1; i++) { leftArray[i] = arr[k]; k++; } rightArray[rightArray.length-1] = Infinity; leftArray[leftArray.length-1] = Infinity; var m = 0; var n = 0; for (var k = startLeft; k < stopRight; k++) { if (leftArray[m] <= rightArray[n]) { arr[k] = leftArray[m]; m++; }else{ arr[k] = rightArray[n]; n++; } } arr += "";//轉(zhuǎn)化為字符串 changedData.push(arr); } showDateChange(changedData); }// 快速排序
// 沒實(shí)現(xiàn)可視化排序function quickSort(){ console.log("快速排序"); function qSort(list){ if (list.length == 0) { return list; } // 選取基數(shù) var pivotIndex = Math.floor(list.length/2); var pivot = list.splice(pivotIndex,1)[0]; var left = []; var right = []; for (var i = 0; i < list.length; i++) { if (list[i] > pivot) { right.push(list[i]); }else{ left.push(list[i]); } } // 遞歸 更換基數(shù) 并且排序其左右 return qSort(left).concat([pivot],qSort(right)); } a = qSort(a); showDate(); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80499.html
摘要:利用將結(jié)構(gòu)轉(zhuǎn)換成數(shù)組拓展運(yùn)算符內(nèi)部使用循環(huán)拓展,合并數(shù)組之后去重第種方法將傳入的數(shù)組或非數(shù)組值與原數(shù)組合并組成一個(gè)新的數(shù)組并返回。該方法會(huì)產(chǎn)生一個(gè)新的數(shù)組再引用上面的任意一個(gè)去重方法第種。 1.第1種 雙層循環(huán),外層循環(huán)元素,內(nèi)層循環(huán)時(shí)比較值,如果有相同的值則跳過,不相同則push進(jìn)數(shù)組 Array.prototype.distinct = function(){ var arr =...
摘要:給定一個(gè)整數(shù),將其轉(zhuǎn)為羅馬數(shù)字。字符數(shù)值例如,羅馬數(shù)字寫做,即為兩個(gè)并列的。通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。注意空字符串可被認(rèn)為是有效字符串。 JS算法題之leetcode(11~20) showImg(https://segmentfault.com/img/bVbwmfg?w=1790&h=714);這次的十道題目都比較容易,我們簡(jiǎn)...
摘要:數(shù)組去重第一種方法先對(duì)數(shù)組進(jìn)行排序,排好序,然后把數(shù)組的當(dāng)前項(xiàng)和后一項(xiàng)進(jìn)行比較,相同則使用數(shù)組的相同的位置,,但是為了防止數(shù)組塌陷,每次刪除數(shù)組元素的時(shí)候要把的值減一。 數(shù)組去重 第一種方法: 先對(duì)數(shù)組進(jìn)行排序sort(),排好序,然后把數(shù)組的當(dāng)前項(xiàng)和后一項(xiàng)進(jìn)行比較,相同則使用數(shù)組的splice(相同的位置,1),但是為了防止數(shù)組塌陷,每次刪除數(shù)組元素的時(shí)候要把i的值減一。 ...
摘要:對(duì)象構(gòu)造函數(shù)的判斷用法的每個(gè)實(shí)例都有構(gòu)造函數(shù),用于保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)如上所示,的實(shí)例的跟對(duì)象是相等的那么我們就可以用此來判斷數(shù)組了原型鏈上的用法屬性表示構(gòu)造函數(shù)的原型其中有一個(gè)方法是用于測(cè)試一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上。 在JS中,數(shù)組是屬于Object類型的,也就是屬于引用類型(引用類型存放在堆內(nèi)存中,在棧內(nèi)存會(huì)有一個(gè)或者多個(gè)地址來指向這個(gè)堆內(nèi)存)。 所以對(duì)于引用...
閱讀 3268·2023-04-25 22:47
閱讀 3779·2021-10-11 10:59
閱讀 2314·2021-09-07 10:12
閱讀 4269·2021-08-11 11:15
閱讀 3440·2019-08-30 13:15
閱讀 1757·2019-08-30 13:00
閱讀 976·2019-08-29 14:02
閱讀 1691·2019-08-26 13:57