排序算法——插入排序

排序算法——插入排序

插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。对于少量元素的排序,它是一个有效的算法。

插入排序是从第二个元素开始与第一个元素作比较,第二个元素小于第一个元素就把第二个元素插入到第一个,以此类推。

例如一组数组{9,8,7,6,5,4,3,2,1},先以第二个数8进行比较,比较前面的数也就是8和9比较,发现8比9小,然后把第二个数8插入到第一个数9前面得到数组{8,9,7,6,5,4,3,2,1};再以第三个数7进行比较,比较前面的数也就是7和9比较,发现7比9小,再比较9前面的数也就是8和7比较,发现7比8小,然后把第三个数7插入到第一个数8前面得到数组{7,8,9,6,5,4,3,2,1},以此类推以第四、五、六、七、八、九个数进行比较,比较前面的数比该数小就将该数插入到比该数小的数的后面,比较前面的数都比该数大就将该数插入到第一个数前面。

次数有序待排序
开始98,7,6,5,4,3,2,1
第一次8,97,6,5,4,3,2,1
第二次7,8,96,5,4,3,2,1
第三次6,7,8,95,4,3,2,1
第四次5,6,7,8,94,3,2,1
第五次4,5,6,7,8,93,2,1
第六次3,4,5,6,7,8,92,1
第七次2,3,4,5,6,7,8,91
第八次1,2,3,4,5,6,7,8,9

在这里插入图片描述

Java代码实现:
public static void main(String[] args) {
    int[] arr = {9,8,7,6,5,4,3,2,1};
    insertSort(arr);
}
public static void insertSort(int[] array)
{
    for(int index = 1; index<array.length; index++){//从左往右用作比较的数据的index,从第二个开始,即index为1
        int temp = array[index];//用作比较的数据
        int leftindex = index-1;//用作比较的数据的index-1,即用作比较数据的前一个数据的index
        while(leftindex>=0 && array[leftindex]>temp){//使用循环比较左边的数据和temp,当左边的数据比较完毕或小于temp时,结束循环
            array[leftindex+1] = array[leftindex];//左边的数据往后移一位
            leftindex--;//左边的数据的index
        }
        if(array[leftindex+1] != temp){
            array[leftindex+1] = temp;//把temp放到空位上
        }
        System.out.format("第%d趟:\t", index);
        for (int l : array) {
            System.out.print(l+",");
        }
        System.out.println();
    }
}
执行结果

在这里插入图片描述
从执行结果中可以看出第i趟的数组中前i+1个数是有序数列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

新鑫S

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

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

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

打赏作者

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

抵扣说明:

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

余额充值