一、氣泡排序
原理:比較兩個相鄰的元素,將值大(小)的元素排到最右端
思路:依次比較相鄰的兩個數,如果按照公升序排列,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複第一趟步驟,直至全部排序完成。
時間複雜度:o(n^2)
舉例說明:要排序陣列:int a=;
第一趟排序:
第一次排序:6和3比較,6大於3,交換位置: 3 6 8 2 9 1
第二次排序:6和8比較,6小於8,不交換位置:3 6 8 2 9 1
第三次排序:8和2比較,8大於2,交換位置: 3 6 2 8 9 1
第四次排序:8和9比較,8小於9,不交換位置:3 6 2 8 9 1
第五次排序:9和1比較:9大於1,交換位置: 3 6 2 8 1 9
第一趟總共進行了5次比較, 排序結果: 3 6 2 8 1 9
第二趟排序:
第一次排序:3和6比較,3小於6,不交換位置:3 6 2 8 1 9
第二次排序:6和2比較,6大於2,交換位置: 3 2 6 8 1 9
第三次排序:6和8比較,6大於8,不交換位置:3 2 6 8 1 9
第四次排序:8和1比較,8大於1,交換位置: 3 2 6 1 8 9
第二趟總共進行了4次比較, 排序結果: 3 2 6 1 8 9
第三趟排序:
第一次排序:3和2比較,3大於2,交換位置: 2 3 6 1 8 9
第二次排序:3和6比較,3小於6,不交換位置:2 3 6 1 8 9
第三次排序:6和1比較,6大於1,交換位置: 2 3 1 6 8 9
第三趟總共進行了3次比較, 排序結果: 2 3 1 6 8 9
第四趟排序:
第一次排序:2和3比較,2小於3,不交換位置:2 3 1 6 8 9
第二次排序:3和1比較,3大於1,交換位置: 2 1 3 6 8 9
第四趟總共進行了2次比較, 排序結果: 2 1 3 6 8 9
第五趟排序:
第一次排序:2和1比較,2大於1,交換位置: 1 2 3 6 8 9
第五趟總共進行了1次比較, 排序結果: 1 2 3 6 8 9
最終結果:1 2 3 6 8 9
**實現:
public
class maopao ;
for(int i=1;i//決定了比較的趟數
for(int j=0;j//決定每一趟比較的次數
if(a[j]>a[j+1])}}
for(int c=0;cout.println(a[c]);}}
}
二、選擇排序
原理:簡單選擇排序是最簡單直觀的一種演算法,基本思想為每一趟從待排序的資料元素中選擇最小(或最大)的乙個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序。基於此思想的演算法主要還有樹型選擇排序和堆排序。
思路:在演算法實現時,每一趟確定最小元素的時候會通過不斷地比較交換來使得首位置為當前最小,交換是個比較耗時的操作。其實我們很容易發現,在還未完全確定當前最小元素之前,這些交換都是無意義的。我們可以通過設定乙個變數min,每一次比較僅儲存較小元素的陣列下標,當輪迴圈結束之後,那這個變數儲存的就是當前最小元素的下標,此時再執行交換操作即可。
時間複雜度:o(n^2)
舉例說明:要排序陣列:int a=;
第一趟排序: 原始資料:5 2 8 4 9 1
最小資料1,把1放在首位,也就是1和5互換位置,
排序結果:1 2 8 4 9 5
第二趟排序:
第1以外的資料進行比較,2最小,
排序結果:1 2 8 4 9 5
第三趟排序:
除1、2以外的資料進行比較,4最小,8和4交換
排序結果:1 2 4 8 9 5
第四趟排序:
除第1、2、4以外的其他資料進行比較,5最小,8和5交換
排序結果:1 2 4 5 9 8
第五趟排序:
除第1、2、4、5以外的其他資料進行比較,8最小,8和9交換
排序結果:1 2 4 5 8 9
**實現:
public
class jiandanxuanze ;
for(int i=0;i1;i++)
if(min!=i)}}
for(int c=0;cout.println(a[c]);}}
public
static
void
swap(int arr,int a,int b)
}
三、插入排序
原理:通過不斷擴張有序序列的範圍,對於未排序的資料,在已排序中從後向前掃瞄,找到相應的位置並插入。
思路:從第乙個元素開始,該元素可以認為已經被排序
取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
如果該元素(已排序)大於新元素,將該元素移到下一位置
重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
將新元素插入到該位置後
重複步驟2~5
時間複雜度:o(n^2)
舉例說明:要排序陣列:int a=;
**實現:
public
class sort ;
insertsort(a);
system.out.println(arrays.tostring(a));
}public
static
void
insertsort(int arr)
arr[j + 1] = node;// 直到要插入的元素不小於第j個元素,將node插入到陣列中}}
}
JAVA中的排序演算法
b color red 1.交換排序 color b 交換排序的基本思想是 兩兩比較待排序記錄,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。應用交換排序的方法有 氣泡排序,快速排序。氣泡排序 最好時間複雜度為 o n 最壞時間複雜度為 o n2 平均時間複雜度為 o n2 穩定性 就...
java中的排序演算法 堆排序
利用堆這種資料結構設計的一種排序演算法。堆是乙個近似完全二叉 樹的結構,並同時滿足堆的性質 子節點的鍵值或索引總是小於 或大於 它的父節點。對於大 小 頂堆而言,堆頂元素的權值 大 小 堆排序是乙個非常穩定的演算法,對於堆排序而言,數 據的初始順序對它的複雜度並沒有影響。原理 將待排序的數組建堆,然...
Java中的經典排序演算法
1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...