博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
插入排序
阅读量:6442 次
发布时间:2019-06-23

本文共 2333 字,大约阅读时间需要 7 分钟。

hot3.png

将arr[i]复制为一个名为target的临时元素。 向下扫描列表,比较这个目标值target与arr[i-1]、arr[i-2]的大小,依次类推。 这个比较过程在小于或等于目标值的第一个元素(arr[j])处停止,或者在列表开始处停止(j=0)。 在arr[i]小于前面任何已排序元素时,后一个条件(j=0)为真, 因此,这个元素会占用新排序子列表的第一个位置。 在扫描期间,大于目标值target的每个元素都会向右滑动一个位置(arr[j]=arr[j-1])。 一旦确定了正确位置j,目标值target(即原始的arr[i])就会被复制到这个位置。 与选择排序不同的是,插入排序将数据向右滑动,并且不会执行交换。

通常,插入排序呈现出二次排序算法中的最佳性能。对于具有较少元素(如n<=15)的列表来说,二次算法十分有效。

package com.lifeibigdata.fight;/** * Created by lifei on 16/10/24. */public class InsertSort {    static int[] insertSort(int[] a){        int j;        for (int i = 1; i < a.length; i++) {            int target = a[i];            j = i;            while (j > 0 && target < a[j - 1]){                a[j] = a[j - 1];                j--;            }            a[j] = target;            for (int x:a) {                System.out.printf(x +" ");            }            System.out.println();        }        return a;    }        public static void main(String[] args) {//TODO 插入排序,只能在大于前一个值并且小于后一个值的地方交换,只大或者只小不能解决问题        int[] a = new int[]{2,3,5,1,4};        int[] r = insertSort(a);        for (int x:r) {            System.out.println(x);        }    }}//=======================================================/** *  *特点是简单,不需要额外的存储空间,在元素少的时候工作得好 */public class InsertSort {    public static void main(String[] args) {        int[] array = { 3, -1, 0, -8, 2, 1 };        printArray(array);        insertSort(array);        printArray(array);    }    public static void insertSort(int[] array) {        if (array == null || array.length < 2) {            return;        }        for (int i = 1; i < array.length; i++) {            int currentValue = array[i];            int position = i;            for (int j = i - 1; j >= 0; j--) {  //j表示已经插入元素的索引值                if (array[j] > currentValue) {                    array[j + 1] = array[j];                    position -= 1;                } else {                    break;                }            }            array[position] = currentValue;        }    }    public static void printArray(int[] array) {        System.out.print("{");        for (int i = 0; i < array.length; i++) {            System.out.print(array[i]);            if (i < array.length - 1) {                System.out.print(", ");            }        }        System.out.println("}");    }}

转载于:https://my.oschina.net/datacube/blog/729977

你可能感兴趣的文章
仪表板颜色
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
mysql oom之后的page 447 log sequence number 292344272 is in the future
查看>>
chrome禁用某个网站js脚本的执行
查看>>
数组排序 和 二分法查找
查看>>
MongoDB C Driver Building on Windows
查看>>
备忘zookeeper(单机+伪集群+集群)
查看>>
无需编译、快速生成 Vue 风格的文档网站
查看>>
AtomicBoolean介绍与使用
查看>>
Elasticsearch之curl删除
查看>>
Apache Spark 内存管理详解(转载)
查看>>
JS隐藏号码中间4位
查看>>
windows下安装Rabbitmq详解
查看>>
HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
查看>>
SQL Server索引 - 索引(物化)视图 <第九篇>
查看>>
[原创]FineUI秘密花园(一) — 为什么选择FineUI?
查看>>
这一文让你彻底理解Spring框架的意义
查看>>
消息中间件Kafka与RabbitMQ谁更胜一筹?
查看>>
CanisMinor 微信小程序工程
查看>>
手机拍照,调取相册 裁剪,上传
查看>>