排序——总结

本文详细介绍了各种排序算法,包括插入排序、交换排序、选择排序和其他排序。插入排序中,直接插入排序和折半插入排序在不同场景下有不同的效率表现;交换排序如冒泡排序和快速排序,快速排序在平均情况下的性能更优;选择排序则有简单选择排序和堆排序,堆排序在大多数情况下效率较高。此外,还提到了归并排序和基数排序,它们在大规模数据排序时表现出色。最后,文章总结了各种排序算法的选择策略及其适用场景。
摘要由CSDN通过智能技术生成

一.插入排序

1.直接插入排序

空间效率:使用常数个辅助单元,空间复杂度为o(1)

时间效率:在排序过程中,向有序子表逐个插入元素的操作进行了n-1躺,每趟都比较和移动元素,而比较和移动元素的次数取决于待排序表的初始状态。在最好的情况下,元素已经有序,此时插入一个元素,都只需要比较一次不需要移动元素,时间复杂度为o(1)。在最坏的情况下,表中的元素是逆序的,总的比较次数和总的移动次数达到最大。平均情况为o(n^2)

稳定性:每次插入元素总是从后向前进行比较,所以不会出现相同元素的相对位置发生变化,所以是稳定的

适用性适用于顺序存储和链式存储的线性表。当为链式存储时,可以从前向后查找指定元素的位置。

   public void insert(int[] array){
        int i,j;
        for(i=2;i<array.length;i++){  //依次将array[2]...array[n]插入到前面已经排序好的数组
            if(array[i]<array[i-1]){  //如果array[i]的关键字小于前驱,插入
                array[0]=array[i];   //将array[0]作为哨兵
                for( j=i-1;array[j]>array[0];j--){
                    array[j+1]=array[j];
                }
                array[j+1]=array[0];
            }
        }
    }

2.折半插入排序

空间复杂度:o(1)

时间复杂度:该比较次数与待排序的初始状态无关,取决表中元素的个数n,约为:o(nlog₂n)。元素的移动次数仍然没有改变,取决于待排序的初始状态,时间复杂度是o(n^2)

稳定性:稳定的

  public void InsertSort(int[] a){
        int i,j,low,high,mid;
        for(i=2;i<a.length;i++)  //将a[2]~a[n]插入到前面已经排序的数组
        {
            a[0]=a[i];  //取a[0]做哨兵,将要插入的a[i]放入这个里面
            low=1;  //设置折半查找的位置
            high=i-1;
            //折半找出要插入的位置
            while(low<=high)
            {
                mid=(high+low)/2;
                if(a[mid]>a[0])
                {
                    high=mid-1;
                }
                else
                {
                    low=mid+1;
                }
            }
            //移动元素
            for(j=i-1;j>=high+1;j--)
            {
                a[j+1]=a[j];
            }
            //将要插入的元素放入
            a[high+1]=a[0];
        }
    }

3.希尔排序

空间效率:o(1)

时间效率:只知道最坏情况下的为o(n^2)

稳定性:当相同关键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值