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}};

 

posted @ 2018-01-03 16:22  smart_hwt  阅读(371)  评论(0编辑  收藏  举报