更新時間:2020-09-08 15:18:41 來源:動力節(jié)點 瀏覽2944次
編程語言的幾種基本算法主要有以下幾個:
1、插入排序(直接插入排序、希爾排序)
2、交換排序(冒泡排序、快速排序)
3、選擇排序(直接選擇排序、堆排序)
4、歸并排序
5、分配排序(箱排序、基數(shù)排序)
按照條件來使用排序算法:
所需輔助空間最多:歸并排序
所需輔助空間最少:堆排序
平均速度最快:快速排序
不穩(wěn)定:快速排序、希爾排序、堆排序
選擇排序算法的時候:
1、數(shù)據(jù)的規(guī)模
2、數(shù)據(jù)的類型
3、數(shù)據(jù)已有的順序
一般來說,當數(shù)據(jù)規(guī)模較小時,應(yīng)該直接插入排序或冒泡排序。任何排序算法在數(shù)據(jù)量小時基本體現(xiàn)不出來差距??紤]數(shù)據(jù)的類型,比如如果全部是正整數(shù),那么考慮使用桶排序最優(yōu)??紤]數(shù)據(jù)已有順序,快速排序是一種不穩(wěn)定的排序(可以改進),對于大部分排好的數(shù)據(jù),快速排序會浪費大量不必要的步驟。數(shù)據(jù)量極小,而且已經(jīng)基本排好序,冒泡是最佳選擇。我們說快速排序好,是指大量隨機數(shù)據(jù)下,快速排序效果最理想。而不是所有情況。
一、插入排序
1、直接插入排序
講一個記錄插入到已經(jīng)排好序的有序表中。
①sorted數(shù)組的第0個位置沒有放數(shù)據(jù)
②從sorted第二個數(shù)據(jù)開始處理;如果該數(shù)據(jù)比它前面的數(shù)據(jù)要小,說明該數(shù)據(jù)要往前面移動。
步驟:
a.首先將數(shù)據(jù)備份放到sorted的第0個位置當哨兵
b.然后將該數(shù)據(jù)前面那個數(shù)據(jù)后移
c.然后往前搜索,找到插入位置
d.找到插入位置之后講,第0個位置的那個數(shù)據(jù)插入對應(yīng)位置。
時間復(fù)雜度:O(nn),當待排記錄序列為正序時,時間復(fù)雜度提高至O(n)

直接插入排序例子java語言實現(xiàn)
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
相關(guān)閱讀