演算法描述:
1. 從第乙個元素開始,該元素可以認為已經被排序
2. 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
4. 重複步驟 3,直到找到已排序的元素小於或者等於新元素的位置
5. 將新元素插入到該位置後
6. 重複步驟 2~5
程式設計思路:雙層迴圈,外迴圈控制未排序的元素,內迴圈控制已排序的元素,將未排序元素設為標桿,與已排序的元素進行比較,小於則交換位置,大於則位置不動
function insertsort(arr)else}}
return arr
}演算法描述:直接從待排序陣列中選擇乙個最小(或最大)數字,放入新陣列中。
程式設計思路:先假設第乙個元素為最小的,然後通過迴圈找出最小元素,然後同第乙個元素交換,接著假設第二個元素,重複上述操作即可
function selectsort(array)
}// 交換位置
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)
return tmp.concat(left, right);
}function mergesort(a)
演算法描述:
在資料集之中,選擇乙個元素作為」基準」(pivot)。
所有小於」基準」的元素,都移到」基準」的左邊;所有大於」基準」的元素,都移到」基準」的右邊。這個操作稱為分割槽 (partition)操作,分割槽操作結束後,基準元素所處的位置就是最終排序後它的位置。
對」基準」左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下乙個元素為止。
function quicksort(arr)
function partition(arr,left,right)
}swap(arr,right,storeindex);
return storeindex//返回標桿元素的索引值
}function sort(arr,left,right)
sort(arr,0,arr.length-1);
return arr;
}演算法描述:
1. 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3. 針對所有的元素重複以上的步驟,除了最後乙個。
4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
程式設計思路:外迴圈控制需要比較的元素,比如第一次排序後,最後乙個元素就不需要比較了,內迴圈則負責兩兩元素比較,將元素放到正確位置上
function bubblesort(arr)}}
return arr;
}
基本排序排序演算法
時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...
基本排序排序演算法
時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...
基本排序演算法
將要排序的物件分作兩部份,乙個是已排序的,乙個是未排序的,從後端未排序部份選擇乙個最小值,並放入前端已排序部份的最後乙個,例如 排序前 70 80 31 37 10 1 48 60 33 80 1 80 31 37 10 70 48 60 33 80 選出最小值1 1 10 31 37 80 70 ...