1 氣泡排序
氣泡排序的0(n2)的複雜度中,外層的迴圈表示有n個數要排,內層從0開始到n-1才是左右交換的實現,造個名字:相鄰比較互換法。
**如下:
2 選擇排序//氣泡排序
public void bubblesort(t t,comparatorc)
}} }
選擇排序的0(n2)的複雜度中,外層的迴圈找到那個當成最小值的坑儲存下標,內層從i+1開始到n-1依次與最小值比較,找到小的就更新之前的下標:
**如下:
3 插入排序//選擇排序
public void selectionsort(t t,comparatorc)
}t temp=t[i];t[i]=t[k];t[k]=temp;//存放入最小值
} }
插入排序裡貌似有個很好的啟發點就是在計算機的世界裡,最小規模對於條件總是成立的,比如這裡當元素個數只有1的時候就是可以看成有序的。
這個在歸併、快速排序、硬幣問題中等都有應用,類似數學歸納法。
插入排序外層迴圈確定前i個元素的有序陣列,內層從i+1開始到0,依次比較i+1位置的元素與前面的元素,大就插入位置,小就前面的元素往後挪一位。小心的地方是迴圈可能一直做到0的位置都在往後挪,最後沒有把i+1位置的元素插入在0處。複雜度也是平方階。
**如下:
4 shell 排序//插入排序
public void insertionsort(t t,comparatorc)else
if(j==0)
}} }
插入排序外層套了個迴圈,不是每次間隔1互換減小逆序,間隔從array.length/2一直到1,快速消除逆序。找了些書講到每次除以2.2效率是最好的,因此最外層迴圈迭代條件應該是 i==2 ? 1: (int)(i/2.2),效率是大概n的1.5次方階。內層迴圈的原理和插入排序一模一樣。
**如下:
//希爾排序:思路類似插入排序
public void shellsort(t t,comparatorc)else
if(j==0)}}
} }
後續見
各種排序演算法(2)
排序 各種排序演算法
每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子表中適當位置,直到全部記錄插入完成為止 待排序的記錄放在陣列r 0,n 1 中 排序過程中將r分成兩個子區間,有序區r 0,i 1 無序區r i,n 1 將當前無序區的第1個記錄,插入到有序區中適當的位置上 每次是有序區增加乙個記錄,知道...
各種排序演算法
交換函式 void swap int a,int b 氣泡排序 氣泡排序 bubble sort,台灣譯為 泡沫排序或氣泡排序 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排...
各種排序演算法
include include include using namespace std void swap int a,int b void output int a,int n 直接插入排序 時間複雜度o n 2 void insertsort int a,int n 折半插入排序 o n 2 只...