計算機相關演算法

2021-07-03 12:23:32 字數 3021 閱讀 8656

1.氣泡排序

氣泡排序演算法的運作如下:(從後往前)

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較

//氣泡排序

function bubblesort(arr)

}i--;

}return arr;

} var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];

var arrsorted = bubblesort(arr);

console.log(arrsorted);

2. 快速排序

快排圖 設要排序的

陣列是a[0]……a[n-1],首先任意選取乙個資料(通常選用陣列的第乙個數)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的

排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。

一趟快速排序的演算法是:

1)設定兩個變數i、j,

排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給key,即key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第乙個小於key的值a[j],將a[j]和a[i]互換;

4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第乙個大於key的a[i],將a[i]和a[j]互換;

5)重複第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中a[j]不小於key,4中a[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。

//快速排序

function quicksort(array);

}for( ; nonius < j; nonius++)}}

array[nonius] = flag;

sort(0, nonius);

sort(nonius + 1, numsize);

}} sort(0, array.length);

return array;

} var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];

quicksort(arr);

3.選擇排序選擇排序(selection sort)是一種簡單直觀的

排序演算法

。它的工作原理是每一次從待排序的

資料元素

中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)。

對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面「後乙個元素」現變成了「前乙個元素」,繼續跟他的「後乙個元素」進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置(下標),等到迴圈結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第乙個元素的下標,就讓第乙個元素跟他交換一下值,這樣就找到整個陣列中最小的數了。然後找到陣列中第二小的數,讓他跟陣列中第二個元素交換一下值,以此類推。

function swap(items, firstindex, secondindex) 

function selectionsort(items)

}if(i != min)

}return items;

}console.log(selectionsort([1,3,8,4,5,3,2]));

4.二分查詢法(又稱折半查詢法)

優點:比較次數少,查詢速度快,平均效能好;

缺點:是要求待查表為有序表,且插入刪除困難。

因此,二分查詢方法適用於不經常變動而查詢頻繁的有序陣列。

基本思路:陣列中間位置對應的值與需要查詢的值比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將陣列分成前、後兩個子陣列,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子陣列,否則進一步查詢後一子陣列,然後依遞迴。

function binarysearch1(value, arr, startindex, endindex) 

var len = arr.length,

startindex = typeof startindex === 'number' ? startindex : 0,

endindex = typeof endindex === 'number' ? endindex : len -1,

midindex = math.floor((endindex + startindex)/2),

midval = arr[midindex];

if(startindex > endindex)

if(midval === value)else if(value < midval)else

}console.log(binarysearch1(3,[1,2,3,4,5,6,7]));//2

5.堆排序

計算機相關網段計算

規則 ip 00001010.00010101.11100000.00000000 10.21.224.0 子網掩碼 11111111.11111111.11111100.00000000 255.255.252.0 網路標識 11111111.11111111.11100000.00000000 ...

計算機編碼相關

聯通 ascii碼 c1aacda8 11000001 10101010 11001101 10101000 unicode碼 8054901a 10000000 01010100 10010000 00011010 2 u feff轉為utf 8成為3位元組,11111110 11111111 以...

計算機相關知識

一 常用的介面協議 http協議 超文字傳輸協議 https協議 安全超文字傳輸協議 ftp協議 檔案傳輸協議 tcp協議 傳輸控制協議 ip協議 網際網路協議 udp協議 使用者資料協議 二 osi open system interconnection 七層模型 1.物理層 2.資料鏈路層 3....