选择排序和插入排序(JAVA)

本文详细介绍了选择排序和插入排序两种基本排序算法的工作原理、时间复杂度、稳定性及适用场景,并通过实例展示了这两种算法的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择排序:

算法分析:

(1)无论是最坏情况、最好情况和平均情况都需要找到最大值(或最小值),因此其比较次数为(n-1)+(n-2)+(n-3)+...+2+1=n(n+1)/2次;时间复杂度为O(n^{2})

(2)由于选择排序是以最大值或者最小值直接与最前方未排序的键值交换,数据排列顺序很有可能被改变,因此它不是稳定排序

(3)因为需要一个额外的空间,所以空间复杂度为最佳

(3)比较适用于数据量小或者由部分数据已经排过序的情况

实现原理动态图:

/**
 * @author admin $
 * @title $
 * @description $
 * @updateTime $ 22:17$ $
 * @throws $
 */
public class SelcectSort {
   static int data[]=new int[]{9,7,5,3,4,6};

    public static void main(String[] args) {
        int smallest,temp,index;
        for (int i = 0; i < 5; i++) {
            smallest=data[i];
            index=i;//用于标记下标 如果smallest>data[j],位置不变
            for (int j = i+1; j <6 ; j++) {
                if (smallest>data[j]){
                    smallest=data[j];
                    index=j;//标记下标
                }
            }
            temp=data[index];
            data[index]=data[i];
            data[i]=temp;
            System.out.println("第"+i+"次排序结果:");
            for (int j = 0; j <6 ; j++) {
                System.out.print(data[j]);
            }
            System.out.println();
        }
    }
}

运行结果

插入排序

插入排序法是将数组中的元素逐一与排好的数据进行比较,现将前两个元素排好,再排第三个元素插入适当的位置,也就是说这三个元素依然是已排序好的,接着将第四个元素加入,重复此步骤,直到排序完成为止。

算法分析

 (1)无论是最坏情况和平均情况都比较次数为(n-1)+(n-2)+(n-3)+...+2+1=n(n+1)/2次;时间复杂度为O(n^{2})

(2)插入排序是稳定排序法

(3)因为需要一个额外的空间,所以空间复杂度为最佳

(4)这种排序法适用于大部分数据已经排过序的情况,也适用于往已排序数据库中添加新数据后再进行排序的情况

(5)由于插入排序法会造成数据的大量搬移,因此建议在链表上使用

动态图解:

 

 

 


import java.util.Arrays;

/**
 * @author admin $
 * @title $
 * @description $
 * @updateTime $ 22:37$ $
 * @throws $
 */
public class InsertSort {


    public static void main(String[] args) {
        int[] array={8,4,6,7,3,5};
        int i,j,temp;
        for(i=1;i<array.length;i++) {
     
            temp=array[i];
            for(j=i-1;j>=0;j--) {
                if (temp > array[j]) {
                    break;
                }else{
                    array[j+1] = array[j];
                }
            }
            array[j+1]=temp;
        }
        System.out.println(Arrays.toString(array));
    }

}

运行结果:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值