排序算法——直接插入排序(insertSort)

排序原理

  1.把所有的元素分为两组,已经排序的和未排序的;
  2.找到未排序的组中的第一个元素,向已经排序的组中进行插入;
  3.倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位;
排序算法——直接插入排序(insertSort)_第1张图片

代码实现

public static void insertSort(double a[]){
        //i为待插入元素的索引
        for(int i=1;i<a.length;i++){
            for(int j=i;j>0;j--){
                //比较索引j处的值和j-1处的值,如果j-1处的值比j的值大,那么交换数据,如果不大,则插入结束 退出循环
                if(a[j-1]>a[j])
                {
                    double temp=a[j-1];
                    a[j-1]=a[j];
                    a[j]=temp;
                }
                else
                    break;
            }
        }
    }

测试

public static void main(String[] args) {
        double arr[]={4,5,3,6,11,14,1,8};
        insertSort(arr);
        System.out.println(Arrays.toString(arr));
        //[1.0, 3.0, 4.0, 5.0, 6.0, 8.0, 11.0, 14.0]
    }

算法分析

排序算法——直接插入排序(insertSort)_第2张图片
  比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么把要插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的

你可能感兴趣的:(算法)