演算法思想:正如其名字一樣,n個數每次將最大的數(或最小的數)放到最後乙個位置,就像過關斬將一樣,然後待排序的數減一,直到所有的數都是有序的,不交換,此時sorted = true,排序結束。
public
static
void
bubblesort
(int arr)
}}}
演算法思想:每次找到最小的數放在第乙個位置,然後待排序的數減一。這是最穩定的乙個演算法,迴圈次數恒為n∗(
n−1)
/2
n*(n-1)/2
n∗(n−1
)/2,不建議使用這種方法排序。
public
static
void
selectsort
(int arr)
}/*交換*/
int tmp = arr[i]
; arr[i]
= arr[min]
; arr[min]
= tmp;
}}
演算法思想:就像手中有兩堆撲克牌一樣,每次從無序的一堆牌中拿出一張插入到有序的撲克牌中。那麼對於一串數字來說,如果只有乙個數,那麼顯然它是有序的,所以只需要從第二個數起,依次地插入到有序的陣列中。在插入數字的過程中,我們先要將所有插入位置後的數(包括插入位置的數後移)後移,將待插入的位置空出來,將要插入的數放進去,然後重複此過程。
提示:這個好像有乙個坑,會導致陣列下標溢位。
請看以下**:
public
static
void
insertionsort
(int arr)
arr[j +1]
= tmp;
}}
正確的做法只需把這兩條件交換一下就可以了。
arr[j]
> tmp && j >=0;
//錯誤
把 j >= 0 這個條件放前面,
j >=
0&& arr[j]
> tmp;
//正確
以下是正確的**:
public
static
void
insertionsort
(int arr)
arr[j +1]
= tmp;
}}
三大排序演算法
當前結果是從大到小,若想從小到大排序,將a j a j 1 改為 a j a j 1 即可 a 1,4,2,5,22,3 n len a for i in range 1 n for j in range n i if a j a j 1 a j a j 1 a j 1 a j print a 當前...
三大初級排序演算法
1 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是o n 2 的演算法。2 插入排序 插入排序通過把序列中的值插入乙個已經排序好的序列中,直到該序列的結束。3 shell排序 shell排序通...
最最最基礎的排序大演算法
技術篇,話不多說,走起。時間複雜度統計 1.氣泡排序 演算法規則 由於演算法每次都將乙個最大的元素往上冒,我們可以將待排序集合 0.n 看成兩部分,一部分為 k.n 的待排序unsorted集合,另一部分為 0.k 的已排序sorted集合,每一次都在unsorted集合從前往後遍歷,選出乙個數,如...