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...