插入排序的测试及优化

本文探讨了插入排序算法的原理和实现,通过代码示例展示了原始插入排序的执行过程。文章指出,虽然插入排序在某些特定情况下(如近似有序数组)比高级排序算法更快,但其平均时间复杂度为O(n^2)。为了优化,作者提出了一种减少交换和赋值次数的策略,实测显示优化后的算法性能提升了约30%。此外,插入排序在处理大量重复数据时表现出较高的效率。
摘要由CSDN通过智能技术生成

       关于O(n^2) 的排序算法中,插入排序是不得不提的一种。相比较于冒泡排序,选择排序这些真正的O(n^2)算法,插入算法在一些情况下的性能会比一些高级排序算法如归并排序,快速排序更加高效,而这些情况我们会在下面的一些情况中进行讨论。

        首先,既然要写一个插入排序算法,我们第一个要做的自然是理解插入排序的过程是怎么样的。

        第一步,给定一个随机产生的数组,从第二个数进行遍历;

        第二步,将遍历到的数与前一个数进行比较,如果这个数小于前一个数,则进行交换,再与前面的数进行比较,若小于,则再交换,一直比较到第一个数;

        第三步,如果遍历的数大于前一个数,不交换,继续向后遍历;

        代码示例:

        

public class insertionSort {//插入排序
public static  void sort(Comparable[] arr){
    int n = arr.length;
    for(int i=1; i<n; i++){
        for(int j=i; j>0; j--){
            if(arr[j].compareTo(arr[j-1])<0){//如果arr[j]<arr[j-1]
                swap(arr, j , j-1);//交换两者
            }
            else
                break;
        }
    }
}
 
public static void swap(Object arr[], int x, int y){
    Object temp = arr[y];
    arr[y] = arr[x];
    arr[x] = temp;
}
}

    可能有同学要问了,你那个sort(Comparable[] arr)是什么意思呢?

    其实,这里是可以写成sort(int [] arr),这样就好理解了,就是一个int类型的数组嘛。

    但是,我们排序的不可能永远是一个int类型的数组,有可能我们需要排序浮点型的数组,有可能我们需要根据学生的成绩来对学生进行排名......

    所以,我们就不能使用普通的比较arr[j]<arr[j-1]这种方法,来对学生的成绩进行排序,这里使用了compareTo()这种方法,我们将具体的比较方法放在了compareTo()方法中,而Comparable[] 则表示这里引用的是一个实现了Comparable接口的类,里面实现了compareTo()方法,下面是一个例子:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值