選擇排序:
選中乙個數挨個與後續元素去比較若為公升序排序,則arr[x1]>arr[x2] 則兩者互換,接著使用當前(arr[x1])與後續元素比較.
array [7,6,9,4,8]
第一輪:7 6 9 4 8
第一次:7 去和 6 比較 互換, 6 7 9 4 8
第二次:6 去和 9 比較 不動, 6 7 9 4 8
第三次:6 去和 4 比較 互換, 4 7 9 6 8
第四次: 4 去和 8 比較 不動。 4 7 9 6 8 // 第一輪完成,4次比較
完成後得出第乙個為最小值,4
第二輪:4 | 7 9 6 8
因為4 為最小值,則排除該元素,而後元素做上述流程比較。
第一次: 7 去和 9 比較 不動, 7 9 6 8
第二次:7 去和 6 比較 互換, 6 9 7 8
第三次:6 去和 8 比較 不動, 6 9 7 8
// 第二輪完成,3次比較
完成後得出第乙個為最小值,6
第三輪:4 6 | 9 7 8
因為前兩輪排序出 4 6 ,則排除其元素,而後元素做上述流程比較
第一次: 9 去和 7 比較 互換, 7 9 8
第二次:7 去和 8 比較 不動, 7 9 8
// 第三輪完成,2次比較
完成後得出第乙個為最小值,7
第四輪:4 6 7 | 9 8
因為前三輪排序出 4 6 7,則排除其元素,而後元素做上述流程比較
第一次:9 去和 8 比較 互換, 8 9
// 第四輪完成,1次比較
完成後得出第乙個為最小值,8
4 6 7 8 9
至此 最後乙個數以無需做也無後續元素與此比較則排序完成。
總結:5個元素,做了 4+3+2+1次比較,(1+n-1)(n-1)/2 = (n^2 - n) / 2 次比較
完成需要4輪
形如:
*****
****
*****
*code:
int arr = ;
for(int i = 0 ; i < arr.length - 1 ; i++) }}
---氣泡排序:
原理:相鄰元素之間做比較,每輪做完得出最大值。
array [7,6,9,4]
第一輪:
第一次:7 和 6 比較 互換 6 7 9,4
第二次:7 和 9 不動 6 7 9 4
第三次:9 和 4 比較 互換 7 6 4 9
7 6 4 | 9
第二輪:
第一次:7 和 6 比較 互換 6 7 4
第二次:7 和 4 比較 互換 6 4 7
6 4 | 7 9
第三輪:
第一次:6 和 4 比較 互換 4 6 7 9
結論:n個數比較 n-1 + n-2 .. 1 次 (1 + n - 1)(n-1)/2= ( n^2 - n ) / 2 次比較
完成形如
****
*****
*for(int i =0; i < arr.length - 1 ;i++) }}
---開發中arrays.sort();
----查詢:
線性查詢:
原理:挨著遍歷元素若相等則返回該元素角標,否則返回-1
二分查詢:
前提必須是已經排好序的序列。返回值:若查詢到則返回插入點即當前元素角標否則返回第乙個大於當前元素數字的索引(加符號)
原理:分一半查詢。
eg.0 1 2 3 4 5 6
int i = ;
key : 123
定義最小值min起始位置0
定義最大值起始位置max arr.length - 1
比較的值位置 為 mid = (min+max) / 2
每次都拿中間這個數去和key比較,
若key 大於 value[mid] 則將mid +1 賦予給 min
若key 小於 value[mid] 則將mid -1 賦予給 max
若key = value[mid] 則返回mid
--若相等則直接返回
1.min = 0 ; max = arr.length - 1 = 6; mid = 3
123 = arr[3] return min;
--查詢 126
1.min = 0 ; max = arr.length - 1= 6; mid = (min+max)/2=3;
2.126 > 123 則最小的min = mid +1 ; 125 134 12312
3.min = mid + 1 = 4 ;max = 6 (不變);mid = (4+6)/2 =5
4.126 < 134 則 最大位置max = mid -1 ; min = 4 max=4 mid = 4
5.126 > 125 則 min max mid
0 1 2 3 4 5 6
int i = ;
min 移到了 max 後
max min
0 1 2 3 4 5 6
int i = ;
則此時則找不到。return min 即可。
**:int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while (min <= max) else if (key < arr[mid]) else
mid = (min + max) / 2;
}return -(min) - 1;
陣列相關簡單演算法 冒泡,排序和查詢
一 氣泡排序 實現 public static void bubbolesort int arr 二 選擇排序 實現 public static void selectsort int arr 三,二分查詢 折半查詢 二分查詢 陣列一定是有序 分析 a 定義最小索引和最大索引 b 計算中間索引 c ...
陣列簡單操作
陣列簡單操作 系統的方法 一 不可變資料排序 字串排序 nsarray array 4 6 1 8 9 公升序排序 nsarray resultarray array sortedarrayusingselector selector compare nslog resultarray result...
陣列 簡單排序
氣泡排序 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複第一趟步驟,直至全部排序完成。package ch02 public c...