Java基础5一数组的常见应用算法
常用算法
1.冒泡排序:
原理:比较两个相邻的元素,将值大的元素交换至右端
示例:
public static void bubbleSort(int[] a) { int n = a.length; //总共进行n-1轮的比较 for (int i = 1; i < n; i++) { for (int j = 0; j < n - i; j++) { if (a[j] > a[j + 1]) {//交换 int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } }
2.选择排序:
原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。
示例:
public static void selectionSort(int[] a) { for(int i = 0; i < a.length - 1; i++) {// 做第i趟排序 int m = i; for(int j = i + 1; j < a.length; j++){// 选最小的记录 if(a[j] < a[m]){ m = j; //记下目前找到的最小值所在的位置 } } if(i != m){ //交换a[i]和a[m] int temp = a[i]; a[i] = a[m]; a[m] = temp; } } }
3.插入排序:
原理:从数组的第一个元素a[0]开始,将其后一个元素a[1]插入到a[0]的前面或者后面,接着继续这一过程。每次都是将a[i]插入到已经排序好的a[0]~a[i-1]中合适的位置
示例:
public static void insertSort(int[] a) { for (int i = 1; i < a.length; i++) { for (int j = i; j > 0; j--) { if (a[j] < a[j - 1]) { int temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } else { break; } } } }
4.快速排序:
- 快速排序是对冒泡排序的一种改进
- 思想:在数组中找出适当的轴心,然后将数组一分为二,分别对左边与右边数组进行排序
二分查找
- 前提条件: 已排序的数组中查找
- 二分查找的基本思想是:
– 首先确定该查找区间的中间点位置: int mid = (low+upper) / 2;
– 然后将待查找的值与中间点位置的值比较:
-
- 若相等,则查找成功并返回此位置。
- 若中间点位置值大于待查值,则新的查找区间是中间点位置的左边区域。
- 若中间点位置值小于待查值,则新的查找区间是中间点位置的右边区域。下一次查找是针对新的查找区间进行的。
示例:
public static int binarySearch(int[] a, int num) { int low = 0; // 起点 int upper = a.length - 1; // 终点 while (low <= upper) { int mid = (low + upper) / 2; // 中间点 if (a[mid] < num) { // 中间点的值小于要查找的值 low = mid + 1; // 更改查找的起点为中间点位置后一位 } else if (a[mid] > num) { // 中间点的值大于要查找的值 upper = mid - 1; // 更改查找的终点为中间点位置前一位 } else { // 中间点的值等于要查找的值 return mid; // 返回该位置 } } return -1; }
数组帮助类Arrays
- java.util.Arrays 数组操作工具
public static void sort(int[] a); //经过调优的快速排序法 public static int binarySearch(int[] a, int key); //使用二分搜索法
二维数组
- Java并没有真正的多维数组,二维数组可以看成以数组为元素的数组。如:
int [][] a = { {1}, {4,5,6}, {7,8}};
每日积累一点,都是进步的见证。