Java常用算法总结

冒泡排序

从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以让未排序的最大元素上浮到右侧。
在一轮循环中,如果没有发生交换,那么说明数组已经是有序的,此时可以直接退出。

代码如下:

public static int[] sort(int[] array) {
        int temp = 0;
        // 外层循环,它决定一共走几趟 //-1为了防止溢出
        for (int i = 0; i < array.length - 1; i++) {
            int flag = 0; //通过符号位可以减少无谓的比较,如果已经有序了,就退出循环
            //内层循环,它决定每趟走一次
            for (int j = 0; j < array.length - i - 1; j++) {
                //如果后一个小于前一个,则换位
                if (array[j + 1] < array[j]) {
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = 1;
                }
            }
            if (flag == 0) {
                break;
            }
        }
        return array;
    }

选择排序

从数组中选择最小元素,将它与数组的第一个元素交换位置。再从数组剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。
不断进行这样的操作,直到将整个数组排序。

代码如下:
public static int[] sort(int arr[]) {
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {// 认为目前的数就是最小的, 记录最小数的下标
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[minIndex] > arr[j]) {// 修改最小值的下标
                    minIndex = j;
                }
            }// 当退出for就找到这次的最小值,就需要交换位置了
            if (i != minIndex) {//交换当前值和找到的最小值的位置
                temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }
        return arr;
    }

插入排序

每次都将当前元素插入到左侧已经排序的数组中,使得插入之后左侧数组依然有序。

代码如下:

public static int [] sort(int[] arr){
        //遍历所有的数字
        for(int i=1;i<arr.length;i++){
            //如果当前数字比前一个数字小
            if(arr[i]<arr[i-1]){
                //把当前遍历数字存起来
                int temp=arr[i];
                int j;
                //遍历当前数字前面的所有数字
                for(j=i-1;j>=0&&temp<arr[j];j--){
                    //把前一个数字赋给后一个数字
                    arr[j+1]=arr[j];
                }
                //把临时变量(外层for循环的当前元素)赋值给不满足条件的后一个元素
                arr[j+1]=temp;
            }
        }
        return arr;
    }

 

 

posted @ 2019-11-07 21:04  佛系学编程  阅读(401)  评论(0编辑  收藏  举报