排序算法之基本排序算法(冒泡、插入、选择)

关系和简介

 

********

1.本文所介绍算法均以“升序”为例。 

2.稳定算法:数组中有{……,a,……,b,……},且a=b,排序后a,b的相对顺序不会发生改变的算法

3.不稳定算法:数组中有{……,a,……,b,……},且a=b,排序后a,b的相对顺序可能会发生改变的算法

********

插入排序

规则

通俗来讲,像玩扑克牌一样,第一张直接拿在手里,第二张比第一张大的话,放在右侧,小的话,放在左侧。第三张和第二张先比较,大的继续放在右侧,小的再去和第一张比较,大的话,此张成为第二张,原第二张想后移动,变成第三张,第一张不变,小的话,此张变为第一张,原来的两张依次后移。第4.5.6……n张如是。

代码

    public Integer[] insertAscSort(Integer[] arr){
        for (int i=1; i<arr.length; i++) {
            int value = arr[i];//待插入数据
            int j = 0;//待插入位置
            for (j = i-1; j >= 0; j--) {//已排序数组
                if (arr[j] > value) {
                    arr[j+1] = arr[j];//移动数据
                } else {
                    break;
                }
            }
            arr[j+1] = value; //插入数据
        }
        return arr;
    }

 

冒泡排序

规则

在每一轮排序中,从第一个元素开始,比较相邻的两张牌的大小,若前面的元素>后面的元素,则交换元素,否则不动。

代码

    private Integer[] bubbleAscSort(Integer[] arr){
        int temp = 0;
        for(int i=0;i<arr.length-1;i++){//循环次数
            for(int j=0;j<arr.length-1-i;j++){//指针
                if(arr[j] > arr[j+1]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        return arr;
    }

 

选择排序

 

规则

在第一轮的排序中,遍历整个数组,记录最小的元素的下标,将其和下标为0元素交换。

在第N(N>1)轮的排序中,遍历从下标从n(n>0)开始的数组,记录最小的元素,将其和下标为n的元素进行交换。

 

代码

 

    private Integer[] selectAscSort(Integer[] arr) {
        for (int i=0; i<arr.length-1; i++) {
            Integer minIndex=i; //最小元素下标
            for (int j=i; j<arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex=j;
                }
            }
            if (minIndex!=i) {
                Integer temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex = temp;]
            }
        }
        return arr;
    }

 

posted @ 2020-05-06 17:50  代码羡  阅读(204)  评论(0编辑  收藏  举报