基本排序演算法

2022-06-11 22:24:17 字數 1648 閱讀 1647

演算法描述: 

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 ...