更新時間:2020-09-08 15:18:41 來源:動力節點 瀏覽2502次
編程語言的幾種基本算法主要有以下幾個:
1、插入排序(直接插入排序、希爾排序)
2、交換排序(冒泡排序、快速排序)
3、選擇排序(直接選擇排序、堆排序)
4、歸并排序
5、分配排序(箱排序、基數排序)
按照條件來使用排序算法:
所需輔助空間最多:歸并排序
所需輔助空間最少:堆排序
平均速度最快:快速排序
不穩定:快速排序、希爾排序、堆排序
選擇排序算法的時候:
1、數據的規模
2、數據的類型
3、數據已有的順序
一般來說,當數據規模較小時,應該直接插入排序或冒泡排序。任何排序算法在數據量小時基本體現不出來差距??紤]數據的類型,比如如果全部是正整數,那么考慮使用桶排序最優??紤]數據已有順序,快速排序是一種不穩定的排序(可以改進),對于大部分排好的數據,快速排序會浪費大量不必要的步驟。數據量極小,而且已經基本排好序,冒泡是最佳選擇。我們說快速排序好,是指大量隨機數據下,快速排序效果最理想。而不是所有情況。
一、插入排序
1、直接插入排序
講一個記錄插入到已經排好序的有序表中。
①sorted數組的第0個位置沒有放數據
②從sorted第二個數據開始處理;如果該數據比它前面的數據要小,說明該數據要往前面移動。
步驟:
a.首先將數據備份放到sorted的第0個位置當哨兵
b.然后將該數據前面那個數據后移
c.然后往前搜索,找到插入位置
d.找到插入位置之后講,第0個位置的那個數據插入對應位置。
時間復雜度:O(nn),當待排記錄序列為正序時,時間復雜度提高至O(n)
直接插入排序例子java語言實現
public?class?InsertionSort?{
//插入排序:?直接插入排序,?希爾排序
public?static?void?straighInsertionSort(double[]?sorted){
int?length?=?sorted.length;
for(int?i=2;?i=0;?j--){
if(sorted[j]?>?sorted[0]){
sorted[j+1]?=?sorted[j];??//后移一位
}else{
insert?=?j+1;??//插入的位置
break;
}
}
sorted[insert]?=?sorted[0];
}
}
}
public?static?void?main(String[]?args)?{
Random?random?=?new?Random(6);
int?arraySize?=?21;
double[]?sorted?=?new?double[arraySize];
System.out.println("排序前:");
for(int?i=1;i
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習