算法:排序算法总结(持续更新)


前言

最近在补自己的基础知识,发现很多知识看了后容易忘记,于是开始进行对一些知识进行总结,方便以后自己查看。
这里主要是对遇到过的排序算法进行归纳总结,同时比较各自的优缺点。

目前整理的排序算法如下:
1.插入排序
2.选择排序


一、插入排序

思想:将未进行排序的数据插入已经排序好的数据中。

java示例:

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

public class InsertSort {
    public static void main(String[] args) {
        SimpleDateFormat startTime = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
        System.out.println("排序开始时间:"+startTime.format(new Date()));
        //测试80万个数据的排序
        int[] list = new int[800000];
        for (int index = 0; index < 800000; index++) {
            list[index] = (int)(Math.random() * 80000);
        }
        int temp;
        for(int i=1; i<list.length;i++){
            for(int first = 0;first<i;first++){
                if(list[i]<list[first]){
                    temp = list[i];
                    System.arraycopy(list,first,list,first+1,i-first);
                    list[first] = temp;
                }
            }
        }
        SimpleDateFormat endTime = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
        System.out.println("排序结束时间:"+endTime.format(new Date()));
        
    }
}

测试一次结果:8分07秒
参考:插入排序动图(以参考程序在本地跑的测试一次结果为:25分34秒)

一、选择排序

思想:依次选择数组中从小到大的数(或者从大到小的数),再进行交换。总之适合小规模数据排序。

java示例:

import java.util.Arrays;

public class SelectSort {
    public static void main(String[] args) {
        int[] list ={12,23,11,2,52,61};
        int save,temp;
        for(int i=0;i<list.length;i++){
            //选择的数的索引
            save = i;
            for(int j=i+1;j<list.length;j++){
                if(list[j]<list[save]){
                    save = j;
                }
            }
            //交换
            temp = list[i];
            list[i] = list[save];
            list[save] = temp;
        }
        System.out.println(Arrays.toString(list));
    }
}

参考:选择排序

(未完待续)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

半点灿烂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值