【算法笔记】选择排序和插入排序

本文详细介绍了两种经典的排序算法——选择排序和插入排序。选择排序通过不断寻找最小元素并将其放到正确的位置来完成排序。而插入排序则是通过将每个元素插入到已排序序列的正确位置来实现排序。

选择排序


算法思想

首先找到最小的元素,让它和数组的第一个元素交换位置,然后在剩下的元素中找到最小的和数组的第二个元素交换位置,如此往复,直到将整个数组排好序。

算法分析

这里规定数组的长度为N

  • N次交换:外层每循环一次都要进行交换
  • N2/2次比较:0到N-1的任意元素都会N-1-i次比较,所以比较次数为(N-1)+(N-2)+…+2+1=N(N-1)/2~N2
  • 特点:运行时间与输入无关(即使输入一个有序数组运行还是没有改变);数据移动是最少的(j交换次数和数组大小是线性关系)

算法代码

    public static void sort(int[] a){
        int N=a.length;  //数组的长度
        for(int i =0;i<N;i++){
            int min=i;  //最小元素的索引
            for(int j=i+1;j<N;j++){
                if(a[j]<a[min])  //元素小于min索引处的元素时,将此元素位置赋值给索引
                    min=j;
            }
            //交换a[i]和a[min]
            int t =a[i];
            a[i]=a[min];
            a[min]=t;
        }
    }


插入排序


算法思想

拿出一个数,与有序数列比较,插入到适当位置,插入时将其余元素在插入之前都向右移动一位,给插入元素腾出位置。对于一个待排序的数列,我们从第二个元素开始作为索引,默认将第一个元素作为有序序列,索引元素左边的序列始终为有序序列,然后将索引元素插入到左边有序列的合适位置,直到索引达到数组最右端,排序结束。

算法分析

这里规定数组长度为N,需要得到升序排列的数组

  • 最坏情况(输入的数组为降序):每一次待插入元素都要和前面的有序序列的每一个元素进行比较切交换,比较次数为:1+2+3+…+N-1=N(N-1)/2~N2/2,交换次数也为N2/2
  • 最好情况(输入的数组为升序):N-1次比较,0次交换

算法代码

    public static void sort(int[] a){

        int N=a.length;  //数组长度
        for(int i=1 ; i<N;i++){
            for(int j=i;j>0&&a[j]<a[j-1];j--){  
                //比较,待插入元素比前面的元素小时交换
                int t= a[j];
                a[j]=a[j-1];
                a[j-1]=t;
            }
        }
    }
一、数据的介绍数据名称:全国土地出让、土地流转微观数据数据年份:1、土地出让:2000.1-2024.72、土地流转:2005-2022年数据范围:1、土地出让:全国各区县2、土地流转:全国及各省数据格式:xlsx数据来源:中国土地市场网、《中国农村经营管理年报》二、数据指标序号省省代码市市代码县县代码行政区划代码项目序号编号电子监管号项目名称行业分类土地级别宗地编号土地坐落供地总面积_公顷供地方式供地面积_公顷土地用途出让年限成交价格_万元建筑面积_公顷最小建筑密度_百分比最小容积率最小建筑高度_米批准文号批准机关土地使用权人土地来源投资强度_万元每公顷最大建筑密度_百分比最大容积率最小绿化率_百分比最大建筑高度_米最大绿化率_百分比来源约定交地时间约定动工时间约定竣工时间实际交地时间实际动工时间实际交割时间合同签订日期批准日期经度纬度项目位置面积m2土地来源土地用途土地使用年限土地使用权人约定容积率上限约定容积率下限约定交地时间约定开工时间约定竣工时间批准单位合同签订日期地址链接网址家庭承包耕地流转总面积(亩)土地流转率(%)家庭承包经营耕地面积(亩)三、数据概览全国及各省家庭承包耕地流转总面积及经营耕地面积(2005-2022年).xlsx士地交易(2023年1-5月).csv士地交易(2023年6-12月).xlsx中国土地市场网-土地出让数据(2000-2022.12).csv中国土地高频交易数据(2000-2024.7) 2000-2023.csv 2024.1-2024.7.xlsx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值