用js冒泡排序,疾速排序,挑選排序
1.冒泡排序
冒泡排序是比較典範的排序要領,是一種用時刻換空間的排序要領。我總結了一下它的特性:(1)它的時刻複雜度是;(2)每一趟相鄰元素兩兩比較終了就會發生最值(最大值);(3)每次比較完後下一趟就會少一個元素介入比較(即該趟比較的最大值)。
// 冒泡排序
function maopao(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=i+1;j<arr.length;j++){
// 假如前面的大,交流位置
var temp=[];
if(arr[i]>arr[j]){
temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
var arr = [1,9,3,7,2,8,3,99,44,1,6];
maopao(arr);
console.log("冒泡排序");
console.log(arr);
疾速排序
// 2.疾速排序
一趟疾速排序的算法是:
1)設置兩個變量i、j,排序最先的時刻:i=0,j=N-1;
2)以第一個數組元素作為癥結數據,賦值給key,即 key=A[0];
3)從j最先向前搜刮,即由后最先向前搜刮(j=j-1即j–), 找到第一個小於key的值A[j],A[i]與A[j]交流;
4)從i最先向後搜刮,即由前最先向後搜刮(i=i+1即i++), 找到第一個大於key的A[i],A[i]與A[j]交流;
5)反覆第3、4、5步,直到I=J; (3,4步是在順序中沒找到時刻j=j-1,i=i+1,直至找到為止。 找到並交流的時刻i, j指針位置穩定。別的當i=j這歷程肯定正好是i+或j-完成的末了令輪迴完畢)
function quickSort(arr){
// 假如數組長度小於即是1,直接返回
if(arr.length<=1){return arr;}
// 挑選一個基準
var pivotIndex = Math.floor(arr.length/2);
// 將基準與原數組星散
var pivot = arr.splice(pivotIndex,1)[0];
// 定義擺布兩個空數組用來寄存
var left = [];
var right=[];
// 輪迴,假如小於基準就放左側,大於基準就放右側
for(var i=0;i<arr.length;i++){
if(arr[i]<=pivot){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
// 運用遞歸
return quickSort(left).concat(pivot, quickSort(right));
}
var arr2 = [999,9,3,7,24,8,3,99,44,1,6];
console.log("疾速排序")
console.log(quickSort(arr2));
3.挑選排序
挑選排序比擬冒泡排序不穩定,時刻複雜度也是。挑選排序沒趟都邑發生最小值,它不是相鄰元素的比較而是在該元素設置一個索引i。然後與數組的其他元素順次比較(除了上一個索引值),直到找到小於該元素(索引j)時交流兩元素,接着繼承從i索引(此時已不是本來的數值)值與索引j+1值比較。
// 挑選排序
function selectSort(arr){
var minIndex;
var temp;
// 輪迴
for(var i=0;i<arr.length-1;i++){
minIndex=i;
// 找到從i最先到末了的最小的數
for(var j=i+1;j<arr.length;j++){
if( arr[j] < arr[minIndex] ) {
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
var arr3 = [99,9,3,7,24,8,3,99,44,1,6];
console.log(selectSort(arr3));