Java直接插入排序
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
算法步骤:
1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
算法图示:

算法基本性能
| 排序方法 | 平均时间复杂度情况 | 最好情况 | 最坏情况 | 空间复杂度 | 稳定性 | 
| 插入排序 | O(n2) | O(n) | O(n2) | O(1) | 稳定 | 
Java代码
package com.sort;
import java.util.Random;
public class Main {
    // 从小到大
    private static void sort(int[] array) {
        if (array.length <= 1) {
            return;
        }
        for (int i = 1; i < array.length; i++) {
            /**
             * 因为0~i-1为有序的,如果i位置的大于i-1位置的,说明0~i也是有序的,
             * 反之需要在0~i-1直接找出i位置的元素的正确位置插入
             */
            if (array[i] < array[i - 1]) {
                /**
                 * 先保存i位置元素
                 */
                int temp = array[i];
                int j = i - 1;
                /**
                 * 从i-1开始向前查找,一直到找到比i位置元素小的位置,然后插入
                 */
                for (; j >= 0 && array[j] > temp; j--) {
                    /**
                     * 没有找到,那么将此位置的元素后移一位,腾出位置
                     */
                    array[j + 1] = array[j];
                }
                /**
                 * 将i位置元素放在腾出的位置上面
                 */
                array[j + 1] = temp;
            }
        }
    }
    /**
     * 获取指定长度的随机数组
     */
    public static int[] getRandomArray(int n) {
        int[] array = new int[n];
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(500);
        }
        return array;
    }
    /**
     * 打印指定数组
     */
    public static void outputArray(int[] array) {
        for (int i : array) {
            System.out.print(i + " ");
        }
        System.out.println("");
    }
    public static void main(String[] args) {
        int[] array = getRandomArray(10);
        outputArray(array);
        sort(array);
        outputArray(array);
    }
}
Java直接插入排序的更多相关文章
- 疯狂的Java算法——插入排序,归并排序以及并行归并排序
		从古至今的难题 在IT届有一道百算不厌其烦的题,俗称排序.不管是你参加BAT等高端笔试,亦或是藏匿于街头小巷的草根笔试,都会经常见到这样一道百年难得一解的问题. 今天LZ有幸与各位分享一下算法届的草根 ... 
- JAVA排序--[插入排序]
		package com.array; public class Sort_Insert { /* * 项目名称:插入排序 ; * 项目要求:用JAVA对数组进行排序,并运用插入排序算法; * 作者:S ... 
- Java温故而知新-插入排序
		插入排序 插入排序的基本思想是将待排序的元素依次插入序列合适的位置,然后将这个位置后面的元素依次向后移动一位 位置1 2 3 4 5 6 序列5 4 2 1 8 3 设第1位为最初始的基础元素,也就是 ... 
- 【Java SE】如何用Java实现插入排序
		摘要:前面三期分别写了三篇简单排序的算法,今天来讲一点稍微难一点的排序算法-----插入排序. 基本思想: 设n个数据已经按照顺序排列好(假定从小排到大). 输入一个数据x,将其放在恰当的位置,使其顺 ... 
- JAVA数据结构--插入排序
		插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in- ... 
- Java实现插入排序
		package Sort; import java.util.Arrays; public class InsertionSort { public static int[] sort(int[] l ... 
- java 用插入排序思想,对不规则数组排序。
		知道插入排序后,无意中发现,用插入排序思想,对不规则数组排序的排序 发现和许多大神写的不一样,大神写的简洁多了.-------- 
- Java算法-插入排序
		插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k ,并且在寻找这个位置 k 的过程中逐个将比较过的 ... 
- java 数组排序 插入排序法
		插入排序法思想:将n个数字分为前面几个是有序数字集合,后面几个为无序集合.当然尚未排序之前,可以将n0 看为有序数集合,N1-Nn-1 看为等待排序的无序集合.从N1开始将无序数一个一个插入到有序数集 ... 
随机推荐
- crm2011创建货币Money类型的字段
			using System; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; using Microsoft ... 
- 分享8款绚丽的HTML5/jQuery特效插件
			有几天没有分享前端资源了,今天要向大家分享15款非常给力的HTML5/jQuery特效插件,废话少说,一起来看看. 1.CSS3图片重力感应特效 很酷的一款CSS3模拟重力感应特效,你可以拖动图片来甩 ... 
- Action 和 Func
			C# 中的两个动态委托类型 也就是说我们不用在使用委托的时候就去声明一个委托对象,而是通过Action和Func就可以模拟出我们自己要用到的委托 区别: Action 表示没有返回值的委托 例如:A ... 
- (转)从Membership 到 .NET4.5 之 ASP.NET Identity
			引入 - 用户信息是如何存在数据库中的 我们前两篇都只讲到了怎么用Membership注册,登录等,但是我们漏掉了一个很重要并且是基本上每个用Membership的人都想问的,我的用户信息怎么保存?我 ... 
- c#高效的线程安全队列ConcurrentQueue<T>(上)
			ConcurrentQueue<T>队列是一个高效的线程安全的队列,是.Net Framework 4.0,System.Collections.Concurrent命名空间下的一个数 ... 
- 基于jQuery的宽屏可左右切换的焦点图插件
			之前分享了很多实用的jQuery焦点图插件,大家可以看看.今天要继续为大家分享一款很不错的jQuery焦点图插件,它是宽屏展示的,而且有两个大气的按钮用来左右切换图片.效果图如下: 在线预览 源码 ... 
- 实例讲解Linux系统中硬链接与软链接的创建
			导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说 ... 
- PHP7安装问题解决
			ext/standard/info.o: In function `php_info_print_request_uri’: /root/php-5.4.16/ext/standard/info.c: ... 
- IOS缓存之NSCache缓存
			NSCache:专门做缓存的类 NSCache简介:NSCache是苹果官方提供的缓存类,用法与NSMutableDictionary的用法很相似,在AFNetworking和SDWebImage中, ... 
- 05. 取SQL分组中的某几行数据
			对表中数据分组,有时只需要某列的聚合值:有时却需要返回整行数据,常用的方法有:子查询.ROW_NUMBER.APPLY,总体感觉还是ROW_NUMBER比较直观.测试数据: if OBJECT_ID( ... 
