1.氣泡排序
就是從最左邊開始,重複地訪問要排序的數列,一次比較兩個元素,如果他們的順序錯誤,就把他們交換。通過一次次的比較,越大的元素會通過交換慢慢「浮」到數列的頂端,故名「冒泡」。是穩定的排序演算法。
實現:
1.常規實現
public
class bubblesort ;
//臨時儲存資料
int temp = 0;
for (int i = 0; i < target.length; i++) }}
for (int i = 0; i < target.length; i++)
}}
我們可以看到上面其實有一部分迴圈是多餘的,為什麼呢?因為每一趟冒泡下來,其實後面的順序已經排好了,所以我們不需要再對他們進行重複判斷,所以外層迴圈從陣列的最後開始,這裡每一次迴圈下來,外層迴圈就減1,因為後面的已經排好序了。
2.優化實現如下:
public
class bubblesort ;
//臨時儲存資料
int temp = 0;
//優化後
for (int i = target.length-1; i > 1; i--) }}
for (int i = 0; i < target.length; i++)
}}
氣泡排序時間複雜度是:o(n²)
2.選擇排序
public
class
selectsort ;
int temp = 0;
//暫存最小值的索引
intindex;
for (int i = 0; i < target.length; i++)
}//交換
temp = target[index];
target[index] = target[i];
target[i] = temp;
}for (int i = 0; i < target.length; i++)
}}
選擇排序時間複雜度是:o(n²)
3.插入排序
將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序。是穩定的排序方法。
插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後乙個元素除外(讓陣列多乙個空間才有插入的位置),而第二部分就只包含這乙個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
實現:
public
class
insertsort ;
//暫存待插資料
int temp = 0;
//暫存待插資料下標
intindex = 0;
//從第二個數開始,因為第乙個可以看做有序
for (int i = 1; i < target.length; i++)
target[index] = temp;
}for (int i = 0; i < target.length; i++)
}}
插入排序時間複雜度是:o(n²),但是如果資料已經基本有序或者有序的話,插入排序時間複雜度為o(n).
這裡只是比較簡單的排序演算法,適合入門學習,稍後會有更加複雜的演算法。
簡單排序(選擇 冒泡 插入)
逆序對設a aa為乙個有n nn個數字的有序集 n 1n 1 n 1 其中所有數字各不相同。如果存在正整數i ii j jj使得1 i n1 leq i j leq n 1 in而且a i a j a i a j a i a j 則 a i a j a i a j a i a j 這個有序對稱為a的...
常見簡單排序演算法(選擇,冒泡,插入)
原理 每一次從待排序的資料元素中選出最大 小 的,將其放在前面已排好序的資料後面,然後又從剩下的資料中選出最大 小 的,重複操作,以此類推。c include void main int i,j,k,temp for i 0 i 10 i temp a i 找到了就開始交換位置 a i a k a ...
簡單排序演算法 冒泡 插入 選擇
1.氣泡排序 資料兩兩比較,每次冒出乙個最大 小 值,需要n n 1 1次比較,時間複雜度o n 2 基本 void sort int arr void swap int arr,int i,int j 如果給定陣列本身已經是排好的順序,那麼優化一下以上排序 如果第一次遍歷時沒有任何數交換,那麼證明...