三大基礎的排序演算法

2021-10-02 04:38:00 字數 1340 閱讀 1745

演算法思想:正如其名字一樣,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集合從前往後遍歷,選出乙個數,如...