打算學習一下排序演算法,記錄一下方便以後複習。首先介紹一下不同種類的排序演算法的複雜度
排序法最差時間分析
平均時間複雜度
穩定度空間複雜度
氣泡排序
o(n2)
o(n2)
穩定o(1)
快速排序
o(n2)
o(n*log2n)
不穩定o(log2n)~o(n)
選擇排序
o(n2)
o(n2)
穩定o(1)
二叉樹排序
o(n2)
o(n*log2n)
不穩定o(n)
插入排序
o(n2)
o(n2)
穩定o(1)
堆排序o(n*log2n)
o(n*log2n)
不穩定o(1)
希爾排序oo
不穩定o(1)
選擇排序,兩次for迴圈,遍歷陣列,最外層的for迴圈假選定i為最小值的下標。下層for迴圈遍歷陣列,找到最小的下表。對元素交換。繼續遍歷,這就是選擇排序。選擇排序菜鳥教程鏈結
下面是菜鳥教程的動態圖,我直接引用了。
下面是選擇排序的c#**
///
/// 選擇排序
///
///
///
public
int[
]selectsort
(int
nums)}if
(i!=minval)
}return nums;
}
同樣兩個for迴圈,比較前後兩個數字大小,按所需排序交換前後兩個數字。
c#**如下
///
/// 氣泡排序
///
///
public
void
bubblesort
(int
nums)}}
}
將陣列中的乙個元素,該元素為基準,大於該元素放在右側,小於該元素放在左側。之後對該基準元素左側、右側按同樣方式遞迴。
**如下
///
/// 快速排序
///
/// 陣列
/// 陣列排序開始位置
/// 排序結束位置
public
void
quicksort
(int
nums,
int l,
int r)
//右側大於左側結束
if(l >= r)
//呼叫一次 排序 並查詢基準值位置
int pivot =
sortonce
(nums, l, r)
;//遞迴
quicksort
(nums, l, pivot -1)
;quicksort
(nums, pivot +
1, r);}
public
intsortonce
(int
nums,
int left,
int right)
nums[left]
= nums[right]
;while
(nums[left]
<= pivot && left < right)
nums[right]
= nums[left];}
//基準值賦值回陣列 並返回基準位置
nums[left]
= pivot;
return left;
}
排序演算法之氣泡排序 選擇排序
排序演算法有很多,包括插入排序,氣泡排序,堆排序,歸併排序,選擇排序,計數排序,基數排序,桶排序,快速排序等。插入排序,堆排序,選擇排序,歸併排序和快速排序,氣泡排序都是比較排序,它們通過對陣列中的元素進行比較來實現排序 其他排序演算法則是利用非比較的其他方法來獲得有關輸入陣列的排序資訊 氣泡排序 ...
氣泡排序,選擇排序,快速排序
1.氣泡排序 氣泡排序 bubble sort 最為簡單的一種排序,通過重複走完陣列的所有元素,通過打擂台的方式兩個兩個比較,直到沒有數可以交換的時候結束這個數,再到下個數,直到整個陣列排好順序。因乙個個浮出所以叫氣泡排序。雙重迴圈時間o n 2 void bubblesort int arr in...
氣泡排序 選擇排序 快速排序
氣泡排序的思想在於,不斷地將當前元素與後乙個元素進行比較,如果當前元素較小,則調換當前元素與後乙個元素的位置,否則保持不變 假設需要排序的元素一共有n個,從第乙個元素開始,對後續的 n 2 元素進行上述比較,最終的排序結果中,最後的元素是最大值。def bubble sort alist n len...