基本排序算法
阿新 • • 發佈:2017-08-01
基本 [] 取出 array font 序表 lec 最終 兩個
1. 從第一個元素開始,該元素可以認為已經被排序
2. 取出下一個元素,在已經排序的元素序列中從後向前掃描
3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
4. 重復步驟 3,直到找到已排序的元素小於或者等於新元素的位置
5. 將新元素插入到該位置後
2. 進行兩兩歸並使記錄關鍵字有序,得到 n/2 個長度為 2 的有序子表
1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3. 針對所有的元素重復以上的步驟,除了最後一個。
4. 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
插入排序
算法描述:1. 從第一個元素開始,該元素可以認為已經被排序
2. 取出下一個元素,在已經排序的元素序列中從後向前掃描
3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
4. 重復步驟 3,直到找到已排序的元素小於或者等於新元素的位置
5. 將新元素插入到該位置後
6. 重復步驟 2~5
編程思路:雙層循環,外循環控制未排序的元素,內循環控制已排序的元素,將未排序元素設為標桿,與已排序的元素進行比較,小於則交換位置,大於則位置不動function insertSort(arr){ var tmp; for(var i=1;i<arr.length;i++){ tmp = arr[i]; for(var j=i;j>=0;j--){ if(arr[j-1]>tmp){ arr[j]=arr[j-1]; }else{ arr[j]=tmp; break; } } } return arr}
選擇排序
算法描述:直接從待排序數組中選擇一個最小(或最大)數字,放入新數組中。編程思路:先假設第一個元素為最小的,然後通過循環找出最小元素,然後同第一個元素交換,接著假設第二個元素,重復上述操作即可
function selectSort(array) { var length = array.length,i,j,minIndex,minValue,temp; for (i = 0; i < length - 1; i++) { minIndex = i; minValue = array[minIndex]; for (j = i + 1; j < length; j++) {//通過循環選出最小的 if (array[j] < minValue) { minIndex = j; minValue = array[minIndex]; } } // 交換位置 temp = array[i]; array[i] = minValue; array[minIndex] = temp; } return array}歸並排序
算法描述:
1. 把 n 個記錄看成 n 個長度為 l 的有序子表2. 進行兩兩歸並使記錄關鍵字有序,得到 n/2 個長度為 2 的有序子表
3. 重復第 2 步直到所有記錄歸並成一個長度為 n 的有序表為止。
編程思路:將數組一直等分,然後合並
function merge(left, right) { var tmp = []; while (left.length && right.length) { if (left[0] < right[0]) tmp.push(left.shift()); else tmp.push(right.shift()); } return tmp.concat(left, right);}function mergeSort(a) { if (a.length === 1) return a; var mid = Math.floor(a.length / 2) , left = a.slice(0, mid) , right = a.slice(mid); return merge(mergeSort(left), mergeSort(right));}快速排序
算法描述:
- 在數據集之中,選擇一個元素作為”基準”(pivot)。
- 所有小於”基準”的元素,都移到”基準”的左邊;所有大於”基準”的元素,都移到”基準”的右邊。這個操作稱為分區 (partition)操作,分區操作結束後,基準元素所處的位置就是最終排序後它的位置。
- 對”基準”左邊和右邊的兩個子集,不斷重復第一步和第二步,直到所有子集只剩下一個元素為止。
冒泡排序
算法描述:1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3. 針對所有的元素重復以上的步驟,除了最後一個。
4. 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
編程思路:外循環控制需要比較的元素,比如第一次排序後,最後一個元素就不需要比較了,內循環則負責兩兩元素比較,將元素放到正確位置上
function bubbleSort(arr){ var len=arr.length; for(var i=len-1;i>0;i--){ for(var j=0;j<i;j++){ if(arr[j]>arr[j+1]){ var tmp = arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp } } } return arr;}
基本排序算法