陣列的演算法

2021-09-29 07:16:55 字數 1908 閱讀 3989

1:直接插入排序

思想:將第乙個數預設為有序,然後從第二個數開始依次與自己的前面比較,如果比自己大的話那麼插到前面的前面,即與自己的前面互換位置,直到自己的前面比自己小,那麼開始下乙個數的插入,直到最後

**:

public

static

void

insertsort

(int

arr)

else

break;}

}}

說明:直接插入演算法的時間複雜度為o(n²),直接插入演算法是穩定的演算法

2:shell插入排序

說明:不穩定1:直接選擇排序

思想:從第乙個數開始,從前往後開始遍歷找到最小的數,然後與第乙個數交換,此時陣列**那個最小的數在第乙個位置,然後第二個數重複上述操作,此時第二小的數在第二個位置,以此類推,直到最後

**:

public

static

void

selectsort

(int

arr)

j++;if

(j == arr.length)

break;}

arr[mark]

= arr[i]

; arr[i]

= min;

}}

說明:直接選擇演算法的複雜度為o(n²),直接選擇演算法是不穩定的

2:堆排序

說明:不穩定1:氣泡排序

思想:從第乙個數開始,與自己旁邊的數相比較,如果比旁邊的數大的話交換順序,然後第二個數與旁邊的數比較,依次類推,最終最大的數在最後面。然後輪迴,只不過這次截止到倒數第二個位置,最後倒數第二個位置上放的是倒數第二大的數,以此類推,最終完成排序

**:

public

class

bubblesort

;for

(int i = arr.length-

1; i >

0; i--

)for

(int j =

0; j < i ; j++)}

for(

int i : arr)

}}

說明:氣泡排序的演算法時間複雜度為o(n²),氣泡排序是穩定的

2:快速排序

思想:首先有乙個left指向陣列的最左邊,right指向陣列的最右邊,指定乙個基值為最左邊的數,i賦值為left,代表移動的left。j賦值為right,代表移動的right。首先j開始移動,直到找到比基值小的數字,然後i開始移動,直到找到比基值大的數,i位置的數與j位置的數進行交換,繼續j先移動然後i移動找到數進行交換,直到i j會和 將此時ij位置的值與基值互換,用基值所在的位置將陣列一分為二,兩邊分別遞迴排序

**:

public

static

void

sort

(int

arr ,

int left ,

int right)

int i = left;

int j = right;

int base = arr[left]

;while

(i != j)

while

(arr[i]

<= base && i < j)

if(i < j)

} arr[left]

= arr[i]

; arr[i]

= base;

sort

(arr,left,i-1)

;sort

(arr,i+

1,right)

;}

說明:快速排序的時間複雜度為o(nlog2(n)) ,快速排序是不穩定的歸併排序

說明:穩定的

基數排序

說明:穩定的

陣列的排序演算法

include int main void puts 您輸入的是個數為 for int j 0 j 10 j int item,ipos 從小到大排序演算法 for int m 0 m 9 m a ipos a m 與第m個元素交換數值 a m item puts n從小到大排序後,輸出為 for ...

關於陣列的演算法

1.將乙個正方形陣列順時針旋轉90 package algorithm author hasee public class rotageorderprint rotag arr public static void rotag int arr sqrialorder arr public stati...

陣列的相關演算法

目錄 1 陣列找最值 2 陣列統計 求總和 均值 統計偶數個數等 3 反轉 4 複製 5 查詢 6 排序 1 陣列中找最值 思路 1 先假設第乙個元素最大 最小 2 然後用max min與後面的元素一一比較 示例 int arr 找最大值 int max arr 0 for int i 1 imax...