Java插入排序算法实现

Java插入排序算法实现

问题描述

输入:一组数据 <a1,a2,a3,...,an> <script id="MathJax-Element-1" type="math/tex"> </script>
输出:排序数据 <b1,b2,b3,...,bn>,b1<b2<b3<...<bn1<bn <script id="MathJax-Element-2" type="math/tex"> ,满足b_1 <...

算法思想

插入排序是最简单的排序算法之一,算法思想与我们玩纸牌思想类似,从左手为空开始,扑克牌背面朝上放于桌上,每次右手从桌上摸一张牌并将其插入到左手正确的位置使得左手牌保持有序,而为了能够找到正确的位置,我们从左手最右侧查看牌,知道找到正确位置将其插入。
以下是左手拿到的牌,已经排好序
左手已经排序的牌
当右手新拿到一张牌时,我们会与左手最右侧的A=15对比,然后K=14,Q, J ,10然后把6放到10的左侧。
右手新拿到的牌

算法实现

import java.util.Random;
public class InsertSort {
    /**
     * 插入排序算法实现
     * @param 待排序数组
     */
    public static void sort(int [] arr){
        //左手第一张牌不需要排序,从第二张开始排序
        for(int i=1;i<arr.length;i++){
            //右手拿第i张牌
            int k = arr[i];
            //从左手最右侧开始比较,即第i-1张,要么找到比k小的牌要么找到左手最左侧,即j=0
            int j = i-1;
            while(j>=0&&arr[j]<k){
                //类似于挪开个空
                //J Q K 空  A   6比A小
                //J Q 空 K A    6比K小
                //J 空 Q K A    6比Q小
                ///...
                arr[j+1] = arr[j];
                j--;
            }
            //插入右手新拿到的牌放到“空”的位置
            arr[j+1] = k; 
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int [] arr = new int[30];
        Random rnd = new Random();
        for(int i=0;i<30;i++)
            arr[i] = rnd.nextInt(1000);

        InsertSort.sort(arr);

        for(int i=0;i<30;i++){
            System.out.println(arr[i]);
        }
    }
}

算法时间

外层循环n-1次
内层循环最坏i-1次,实际上是

1,2,3,4,5,...,n1=n×(n1)2

算法最坏情形运行时间为:

f(n)=O(n2)

演示结果

911 876 851 804 803 799 771 748 728 710 686 683 645 627 595 568 543 527 505 469 465 442 429 423 271 234 195 126 44 9

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值