插入排序
演算法描述:
1. 從第乙個元素開始,該元素可以認為已經被排序
2. 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
4. 重複步驟 3,直到找到已排序的元素小於或者等於新元素的位置
5. 將新元素插入到該位置後
6. 重複步驟 2~5
現有一組陣列 arr = [5, 6, 3, 1, 8, 7, 2, 4][程式設計思路:雙層迴圈,外迴圈控制未排序的元素,內迴圈控制已排序的元素,將未排序元素設為標桿,與已排序的元素進行比較,小於則交換位置,大於則位置不動5] 631
8724
//第乙個元素被認為已經被排序
[5,6] 318
724//
6與5比較,放在5的右邊
[3,5,6] 187
24//3與6和5比較,都小,則放入陣列頭部
[1,3,5,6] 872
4//1與3,5,6比較,則放入頭部
[1,3,5,6,8] 724
[1,3,5,6,7,8] 24[
1,2,3,5,6,7,8] 4
[1,2,3,4,5,6,7,8]
function insertsort(arr)選擇排序else}}
return
arr}
演算法描述:直接從待排序陣列中選擇乙個最小(或最大)數字,放入新陣列中。
[1] 563程式設計思路:先假設第乙個元素為最小的,然後通過迴圈找出最小元素,然後同第乙個元素交換,接著假設第二個元素,重複上述操作即可8724
[1,2] 563
874[
1,2,3] 568
724[
1,2,3,4] 568
7[1,2,3,4,5] 687
[1,2,3,4,5,6] 87[
1,2,3,4,5,6,7] 8
[1,2,3,4,5,6,7,8]
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 的有序表為止。
563程式設計思路:將陣列一直等分,然後合1872
4[5,6] [3,1] [8,7] [2,4][
5,6] [1,3] [7,8] [2,4][
5,6,1,3] [7,8,2,4][
1,3,5,6] [2,4,7,8][
1,2,3,4,5,6,7,8]
function merge(left, right)快速排序return
tmp.concat(left, right);
}function mergesort(a)
演算法描述:
在資料集之中,選擇乙個元素作為」基準」(pivot)。
所有小於」基準」的元素,都移到」基準」的左邊;所有大於」基準」的元素,都移到」基準」的右邊。這個操作稱為分割槽 (partition)操作,分割槽操作結束後,基準元素所處的位置就是最終排序後它的位置。
對」基準」左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下乙個元素為止。
563上述講解了分割槽的過程,然後就是對每個子區進行同樣做法1872
4pivot|5
6319
724|storeindex56
3197
24//將5同6比較,大於則不更換
|storeindex36
5197
24//將5同3比較,小於則更換
|storeindex36
1597
24//將5同1比較,小於則不更換
|storeindex
...361
4972
5//將5同4比較,小於則更換
|storeindex36
1457
29//將標準元素放到正確位置
|storeindex pivot
function quicksort(arr)上述版本會造成堆疊溢位,所以建議使用下面版本else
}return
quicksort(left).concat([tmp],quicksort(right))
}
原地分割槽版:主要區別在於先進行分割槽處理,將陣列分為左小右大
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. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
563程式設計思路:外迴圈控制需要比較的元素,比如第一次排序後,最後乙個元素就不需要比較了,內迴圈則負責兩兩元素比較,將元素放到正確位置上1872
4[56] 318
724//
比較5和6
5 [6
3] 187
2453 [6
1] 872
4531 [6
8] 724
5316 [8
7] 245
3167 [8
2] 453
1672 [84]
5316
7248
//這樣最後乙個元素已經在正確位置,所以下一次開始時候就不需要再比較最後乙個
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 ...