插入排序问题

package com.www.demo10;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Insert {
    public static void main(String[] args) {
        int[] arr = new int[80000];
        for (int i = 0;i < arr.length;i++){
            arr[i] = (int)(Math.random()*1000);
        }

//        show(arr);
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = simpleDateFormat.format(date);
        System.out.println("排序前" + format);
//        insertLinked(arr);//10s
//        insertSort(arr);//2s
        insertSort1(arr);//1s
        System.out.println();
        Date date1 = new Date();
        String format1 = simpleDateFormat.format(date1);
        System.out.println("排序前" + format1);
//        show(arr);
    }

    //方法一:待插入数据从前向后比较,找出要插入位置,然后将该位置数后移一位,腾出位置放待插入数据
    public static void insertSort(int[] arr){
        for (int i = 1;i < arr.length;i++){
            int temp = arr[i];//待插入数据
            for (int j = 0;j < i;j++){//与前面数据比较
                if (arr[i] < arr[j]){
                    for (int k = i;k > j;k--){//第j位置是要插入位置
                        arr[k] = arr[k-1];//后面数向后平移一位
                    }
                    arr[j] = temp;
                }
            }
        }
    }

    //方法二:将待插入数据从后向前比较,比较一次,满足条件就后移一位,继续比较,直到找到待插入位置,插入待插入数据,此方法,比较和移动是同时进行的
    public static void insertSort1(int[] arr){
        for (int i = 1;i < arr.length;i++){
            int temp = arr[i];//待插入数据
            int j = i - 1;
            for (;j >= 0 && (temp < arr[j]);j--){//与前面数据比较
                    arr[j + 1] = arr[j];
            }

            arr[j + 1] = temp;
        }
    }

    //方法三:链表
    public static void insertLinked(int[] arr){
        int size = arr.length;
        Linkedlist node = new Linkedlist(-1);//头结点
        for (int i = 0;i < size;i++){
            Linkedlist temp = node;
            while (true){
                Linkedlist temp1 = new Linkedlist(arr[i]);
                if (temp.next == null){
                        temp.next = temp1;
                        break;
                }
                if (temp1.a < temp.next.a){
                        temp1.next = temp.next;
                        temp.next = temp1;
                        break;
                }
                temp = temp.next;
            }
        }
        Linkedlist temp2 = node.next;
        for (int i = 0;i < size;i++){
            arr[i] = temp2.a;
            temp2 = temp2.next;
        }
    }
    public static void show(int[] arr){
        for (int i = 0;i < arr.length;i++){
            System.out.print(arr[i] + " ");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新手学java2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值